我正在尝试编译我的代码。编译器给出了关于多重定义'
的随机错误/tmp/cctnjqVc.o :(。bss + 0x0):' firstname'的多重定义 /tmp/ccPgFuZw.o:(.bss+0x0):首先在此定义
/tmp/cctnjqVc.o:(.bss+0x200):' resultName的多重定义[abi:cxx11]'
/tmp/ccPgFuZw.o:(.bss+0x200):首先在这里定义
我可以向您保证,我的代码中根本没有多重定义。 我的代码在多个文件中,所以如果你想看到它们全部:
http://www.github.com/calmunicorn/virtualsociety
但我认为有两个文件是关注的:
#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
#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上如果有所作为。
编辑:
感谢所有答案,我做了所有被告知的事情,现在它没有任何问题!
答案 0 :(得分:2)
您通过在标头中定义(而非仅仅声明)without_en_without_season = [url for url in all_urls if '/en' in url and '/season' not in url]
without_en_with_season = [url for url in all_urls if '/en' in url and '/season' in url]
with_en_without_season = [url for url in all_urls if '/en' in url and '/season' not in url]
with_en_with_season = [url for url in all_urls if '/en' in url and '/season' in url]
和firstname
来完成Task docs。要声明它们,您需要做的是在头文件中将它们列为resultName
:
extern
并在extern ofstream firstname;
extern string resultName;
文件中定义(不包含extern
)。
BTW,violate ODR。相反,明确限定标题中的所有内容。
答案 1 :(得分:1)
FileStream.h
ofstream firstname;
将在每个包含.h。
的.cpp文件中定义变量firstname
您可能希望将其更改为.h
中的声明extern ofstream firstname;
然后只在其中一个.cpp文件中定义它
ofstream firstname;