使用STL矢量时构造器的未解析外部符号



因此,我在VS2019中有一个非常简单的项目,其中包括三个文件:

a.h

#pragma once
class A {
public:
A();
};

a.cpp

class A {
public:
A() {}
};

main.cpp

#include <vector>
#include "a.h"
int main() {
std::vector<A> va;
va.emplace_back();
return 0;
}

它在没有矢量的情况下运行良好。但这段代码抛出了一个关于构造函数的链接器错误。我真正不明白的是,如果我用这种方式更改a.pp:

#include "a.h"
A::A() {}

它运行良好。为什么链接器在类的主体中看不到构造函数?

带有main的编译单元只看到这个声明

class A {
public:
A();
};

实际上,构造函数并没有被定义。

模块.cpp中类A的声明打破了一个定义规则。也就是说,在a.pp中声明的类与在a.h.中声明的类别不同

在模块定义的情况下,a.cpp

#include "a.h"
A::A() {}

两个编译单元都有相同的类声明,并且为这个类定义了构造函数。

最新更新