gpt4 book ai didi

c++ - 定义的随机问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:45 25 4
gpt4 key购买 nike

我正在尝试编译我的代码。编译器给出关于“多重定义”的随机错误:

/tmp/cctnjqVc.o:(.bss+0x0): multiple definition of 'firstname'
/tmp/ccPgFuZw.o:(.bss+0x0): first defined here
/tmp/cctnjqVc.o:(.bss+0x200): multiple definition of 'resultName[abi:cxx11]'
/tmp/ccPgFuZw.o:(.bss+0x200): first defined here

我可以向您保证,我的代码中根本没有多重定义。我的代码在多个文件中,所以如果您想查看所有文件:

http://www.github.com/calmunicorn/virtualsociety

但我认为有两个文件是相关的:

文件流.h

#ifndef FILESTREAM_H
#define FILESTREAM_H
#include <fstream>
#include <string>
#include <limits>
using namespace std;
static fstream logFile;
ofstream firstname;
void log(string argument);
string firstName_read(bool boyOrGirl);
string resultName;

#endif

文件流.cpp

#include "FileStream.h"
void log(string argument)
{
logFile.open ("log.txt", fstream::out | fstream::app);

logFile << argument;

logFile.close();
}

string firstName_read (bool boyOrGirl)
{

if (boyOrGirl == true)
{
firstname.open("Name/FirstName_Male.txt", fstream::in);
firstname.close();
return resultName;
}
else
{
firstname.open("Name/FirstName_Female.txt", fstream::in);
firstname.close();
return resultName;
}
}

如果有任何不同,我会使用 Arch Linux。


编辑:

感谢您的所有回答,我按照要求做了所有事情,现在它可以正常工作了!

最佳答案

你做到了 violate ODR通过在 header 中定义(而不是仅仅声明)firstnameresultName。要声明它们,您需要做的是在头文件中将它们列为 extern:

extern ofstream firstname;
extern string resultName;

并在 .cpp 文件中有定义(没有 extern)。

顺便说一句,headers should not use using namespace .相反,明确限定 header 中的所有内容。

关于c++ - 定义的随机问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35307479/

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