![](/img/trans.png)
[英]Unresolved external symbol error while using vectors defined in a header file
[英]Unresolved external symbol of constructer when using STL vectors
因此,我在 VS2019 中有一個非常簡單的項目,其中包含三個文件:
啊
#pragma once
class A {
public:
A();
};
a.cpp
class A {
public:
A() {}
};
主文件
#include <vector>
#include "a.h"
int main() {
std::vector<A> va;
va.emplace_back();
return 0;
}
沒有向量它工作正常。 但是此代碼會引發有關構造函數的 linker 錯誤。 我真正不明白的是,如果我以這種方式更改 a.cpp:
#include "a.h"
A::A() {}
它工作正常。 為什么 linker 看不到 class 主體中的構造函數?
帶有 main 的編譯單元只看到這個聲明
class A {
public:
A();
};
確實沒有定義構造函數。
模塊 a.cpp 中 class A 的聲明打破了單定義規則。 那就是a.cpp中聲明的class和ah中聲明的class不一樣
在此定義模塊 a.cpp 的情況下
#include "a.h"
A::A() {}
兩個編譯單元具有相同的 class 聲明,並且為此 class 定義了構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.