定义的随机问题

时间:2016-02-10 05:26:07

标签: c++ linux

我正在尝试编译我的代码。编译器给出了关于多重定义'

的随机错误
  

/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

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

FileStream.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

FileStream.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上如果有所作为。

编辑:

感谢所有答案,我做了所有被告知的事情,现在它没有任何问题!

2 个答案:

答案 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;