gpt4 book ai didi

将代码拆分为多个文件的 C++ 问题

转载 作者:搜寻专家 更新时间:2023-10-31 00:57:50 24 4
gpt4 key购买 nike

因此,我正在处理一个项目,并决定将代码拆分为多个文件,因为它变得太大了。但是,出现编译错误。在这个简单的案例中,我设法重现了错误:

//main.cpp
#include<iostream>
#include "classa.h"
using namespace std;
int main()
{
return 0;
}

main 只包含 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.cpp 中添加一些东西

//classa.cpp
#include "classa.h"
using namespace std;
int classa::getA()
{
return a;
}
void classa::setA(int newA)
{
a=newA;
}

它给我以下错误:

obj\Debug\sources\main.o:main.cpp:(.bss+0x0): multiple definition of `primes'
obj\Debug\sources\classa.o:classa.cpp:(.bss+0x0): first defined here

问题是,与我的项目不同,我不能为全局变量使用某种常量或定义,因为它们是可以由不同类修改的东西。

最佳答案

将 primes 设为 extern 变量,并在 classa.h header 中声明它,但只在 classa.cpp 中定义一次。

目前,正如您的编译器告诉您的那样,质数存在两次,分别在 main.cppclassa.cpp 中。请记住,#include 只是文本替换。

类.h:

 extern std::vector<int> const primes;

classa.cpp:

std::vector<int> const primes = {1,2,3,5,7,11,13,17,19};

阅读有关存储类说明符的更多信息 here .

关于将代码拆分为多个文件的 C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36675289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com