c++ - 使用 STL 向量时构造函数的未解析外部符号
问题描述
因此,我在 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;
}
没有向量它工作正常。但是这段代码引发了关于构造函数的链接器错误。我真正不明白的是,如果我以这种方式更改 a.cpp:
#include "a.h"
A::A() {}
它工作正常。为什么链接器在类的主体中看不到构造函数?
解决方案
带有 main 的编译单元只看到这个声明
class A {
public:
A();
};
确实没有定义构造函数。
模块 a.cpp 中类 A 的声明打破了单一定义规则。那就是a.cpp中声明的类和ah中声明的类不一样
在此定义模块 a.cpp 的情况下
#include "a.h"
A::A() {}
两个编译单元具有相同的类声明,并且为此类定义了构造函数。
推荐阅读
- opencv - OperationUnsupportedError 与 Lists clojure-java 互操作一起使用
- angular - 由于超时,加载块 77 失败,但在 Sentry 上报告错误
- c# - for循环内对数据库的异步调用
- r - 自动设置 ggplot 边距以包含 geom_text
- python - 为什么我在 Code jam 2018 “再次拯救世界”中的回答是错误的?
- python - python如何连接两个字典
- ruby-on-rails - Ruby on Rails:如何使用 AWS Cognito 池以用户身份访问 S3?
- javascript - 如何在 VUE 组件的 Scoped 区域中使用 JSON 数据
- java - io.github.dropwizard-jobs 的 Maven 依赖项
- cuda - 函数名称中“i”的含义`cusparse
axpyi` 和 `cusparse 多蒂`