gpt4 book ai didi

C++ 函数失败

转载 作者:行者123 更新时间:2023-11-27 23:04:06 25 4
gpt4 key购买 nike

我的 C++ 程序失败,原因如下:

Error   1   error LNK2005: "public: void __thiscall dataHolder::addData(int)" (?addData@dataHolder@@QAEXH@Z) already defined in Source.obj
Error 2 error LNK2005: "public: void __thiscall dataHolder::findUnique(void)" (?findUnique@dataHolder@@QAEXXZ) already defined in Source.obj
Error 3 error LNK2005: "public: void __thiscall dataHolder::printData(void)" (?printData@dataHolder@@QAEXXZ) already defined in Source.obj
Error 4 error LNK1169: one or more multiply defined symbols found

但是,当我将所有定义移动到一个源 C++ 文件中时,它工作正常。

下面是我的源代码:

source.cpp 文件:

#include "dataClass.h"

void main(){

dataHolder v1;

for(int i=1;i<=10;i++)
v1.addData(i);
for(int i=1;i<=5;i++)
v1.addData(i);

v1.printData();

v1.findUnique();
}

dataClass.h 文件:

#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <vector>
#include <map>


using namespace std;

class dataHolder{

public:

void printData();
void addData(int data);

void findUnique();

int uniqueData();

private:
vector<int> dataVector;
};


void dataHolder::addData(int val){
dataVector.push_back(val);
};

void dataHolder::printData(){

vector<int>::iterator vIt;

for(vIt=dataVector.begin();vIt<dataVector.end();vIt++){
cout<< *vIt<<endl;
};
};


void dataHolder::findUnique(){
map<int ,int> dataMap;

vector<int>::iterator vIt;
map<int ,int>::iterator mIt;

for(vIt=dataVector.begin();vIt<dataVector.end();vIt++){

if(dataMap.find(*vIt)==dataMap.end())
dataMap[*vIt]=1;
else
dataMap[*vIt] = dataMap[*vIt]+1;
};

for(mIt=dataMap.begin();mIt != dataMap.end();mIt++){
if(mIt -> second == 1)
cout<<mIt->first<<" is Unique"<<endl;
};
};

问题请指点。

最佳答案

问题是您在头文件中定义 dataHolder 成员函数。这意味着包括您的头文件在内的每个源文件都将具有这些成员函数的定义。

你可以这样做,但是你必须将它们标记为inline,或者可能是static

应该做的是制作另一个包含成员函数定义的源文件,并将该源文件包含在您的项目中,以便对其进行编译和链接。

关于C++ 函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24796548/

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