C++将代码拆分为多个文件的问题
C++ Problems with splitting code into multiple files
因此,我正在处理一个项目,并决定将代码拆分为多个文件,因为它太大了。但是,a出现编译错误。我设法在这个简单的例子中重新创建了错误:
//main.cpp
#include<iostream>
#include "classa.h"
using namespace std;
int main()
{
return 0;
}
主要什么都不做它只是包括classa.h
//classa.h
#ifndef CLASSA_H_INCLUDED
#define CLASSA_H_INCLUDED
#include<vector>
using namespace std;
vector<int> primes= {1,2,3,5,7,11,13,17,19};
class classa
{
private:
int a;
public:
int getA();
void setA(int newA);
};
#endif //CLASSA_H_INCLUDED
该类甚至不是发生错误所必需的。然而,我想在classa.pp 中拥有一些东西
//classa.cpp
#include "classa.h"
using namespace std;
int classa::getA()
{
return a;
}
void classa::setA(int newA)
{
a=newA;
}
它给了我以下错误:
objDebugsourcesmain.o:main.cpp:(.bss+0x0): multiple definition of `primes'
objDebugsourcesclassa.o:classa.cpp:(.bss+0x0): first defined here
问题是,与我的项目不同,我不能为全局变量使用某种常量或定义,因为它们可以由不同的类修改。
Make primes一个extern
变量,并在classa.h
头中声明它,但在classa.cpp
中只定义了一次。
目前,正如编译器告诉您的那样,素数存在两次,分别在main.cpp
和classa.cpp
中。请记住,#include
只是文本替换。
classa.h:
extern std::vector<int> const primes;
classa.cp:
std::vector<int> const primes = {1,2,3,5,7,11,13,17,19};
在此处阅读有关存储类说明符的更多信息。
如果您有.cpp文件,那么拆分为是有意义的
Into.h文件:
extern std::vector<int> primes;
进入.cpp文件:
using namespace std;
vector<int> const primes = {1,2,3,5,7,11,13,17,19};
"使用命名空间std"可能会导致第三方库之间的冲突,但这种情况很少发生——我更喜欢尽可能使用"使用命名空间td"。但是,如果存在冲突,那么您可能希望将"使用命名空间std"本地化到自己的.cpp文件中。(在您控制该文件的#include的位置)。
但有时您可能根本没有.cpp文件(例如,只有本地内联函数或模板类),然后您可以初始化向量,如下所示:
__declspec(selectany) std::vector<int> primes = {1,2,3,5,7,11,13,17,19};
这将指示链接器只获取一个副本(其中一些副本),并丢弃其他所有副本。如果您想#ifdef进行一些初始化,这不会很好地发挥作用,但这无论如何都不是正常的用例。
我宁愿永远不要使用const,因为在2-3级转换后立即获得const总是很痛苦的。我在函数注释中写下什么是输入/什么是输出以及什么不应该修改。(因为它可以随迭代而改变)
- 使用mongocxx驱动程序时包含头文件问题
- 生成文件问题
- 从文件问题加载纹理 Android NDK 和 OpenGL
- Xcode 11 头文件问题
- 使用 c++ ifstream 读取文本文件问题
- 单独的类声明和方法定义文件问题
- C++生成文件问题
- 生成文件问题(体系结构x86_64的未定义符号:"_main",引用自:主可执行文件的隐式入口/启动)
- C++删除未使用的库的生成文件问题
- C++ 使文件问题
- 阅读矩阵市场文件C++问题
- 查找第一个文件问题无法使任何示例正常工作。
- "Recursive Makefile Considered Harmful"样式生成文件问题
- 标题文件问题中的类定义
- 嵌套 while 循环,包含文件 c++ 问题
- 几个制作文件问题
- 生成文件问题,获取"目标'rgbapixel.o'的配方失败"
- 从yaml文件问题opencv读取数据
- 类成员C++标头和 .cc 文件问题
- 添加选项以显示百分比时出现生成文件问题