簡體   English   中英

使用 STL 向量時構造函數的未解析外部符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM