C++ 对<';变量/函数'&燃气轮机;
我正在尝试用candidate.h文件、candidate.cpp文件和main.cpp文件编写一个基本程序 我在candidate.h文件中声明了一个函数voidC++ 对<';变量/函数'&燃气轮机;,c++,unix,compiler-errors,C++,Unix,Compiler Errors,我正在尝试用candidate.h文件、candidate.cpp文件和main.cpp文件编写一个基本程序 我在candidate.h文件中声明了一个函数voidreadCandidates() 然后我在candidate.cpp中将其定义为 void readCandidates () { cin >> nCandidates; string line; getline (cin, line); for (int i = 0; i < nCandidate
readCandidates()
然后我在candidate.cpp中将其定义为
void readCandidates ()
{
cin >> nCandidates;
string line;
getline (cin, line);
for (int i = 0; i < nCandidates; ++i)
{
getline (cin, candidateNames[i]);
delegatesWon[i] = 0;
}
}
在我的candidate.h文件中,以确保它不会被定义两次
当我运行makemain命令时,我得到了错误
/home/pmurray/cs250/Asst1/primaries.cpp:33: multiple definition of `candidate'
candidates.o:/home/pmurray/cs250/Asst1/candidates.cpp:8: first defined here
primaries.o: In function `assignDelegatesToCandidates()':
/home/pmurray/cs250/Asst1/primaries.cpp:37: multiple definition of `nCandidates'
candidates.o:/home/pmurray/cs250/Asst1/candidates.cpp:15: first defined here
primaries.o: In function `assignDelegatesToCandidates()':
/home/pmurray/cs250/Asst1/primaries.cpp:38: multiple definition of `delegatesWon'
candidates.o:/home/pmurray/cs250/Asst1/candidates.cpp:16: first defined here
candidates.o: In function `readCandidates()':
candidates.cpp:(.text+0x49): undefined reference to `candidateNames'
primaries.o: In function `findCandidate(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
primaries.cpp:(.text+0x120): undefined reference to `candidateNames'
primaries.o: In function `printCandidateReport(int)':
primaries.cpp:(.text+0x1d8): undefined reference to `candidateNames'
我尝试将extern放在其中一个变量的声明之前,这导致了错误
/home/pmurray/cs250/Asst1/primaries.cpp:33: multiple definition of `candidate'
candidates.o:/home/pmurray/cs250/Asst1/candidates.cpp:8: first defined here
primaries.o: In function `assignDelegatesToCandidates()':
/home/pmurray/cs250/Asst1/primaries.cpp:37: multiple definition of `nCandidates'
candidates.o:/home/pmurray/cs250/Asst1/candidates.cpp:15: first defined here
primaries.o: In function `assignDelegatesToCandidates()':
/home/pmurray/cs250/Asst1/primaries.cpp:38: multiple definition of `delegatesWon'
candidates.o:/home/pmurray/cs250/Asst1/candidates.cpp:16: first defined here
candidates.o: In function `readCandidates()':
candidates.cpp:(.text+0x49): undefined reference to `candidateNames'
primaries.o: In function `findCandidate(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
primaries.cpp:(.text+0x120): undefined reference to `candidateNames'
primaries.o: In function `printCandidateReport(int)':
primaries.cpp:(.text+0x1d8): undefined reference to `candidateNames'
candidates.cpp:(.text+0x49):对“candidateNames”的未定义引用
primaries.o:在函数“findCandidate(std::basic_string)”中:
primaries.cpp:(.text+0x120):对“candidateNames”的未定义引用
primaries.o:在函数“printCandidateReport(int)”中:
primaries.cpp:(.text+0x1d8):对“candidateNames”的未定义引用
有人知道我做错了什么吗
候选人.cpp
#include <iostream>
using namespace std;
#include "candidates.h"
void readCandidates ()
{
cin >> nCandidates;
string line;
getline (cin, line);
for (int i = 0; i < nCandidates; ++i)
{
getline (cin, candidateNames[i]);
delegatesWon[i] = 0;
}
}
#包括
使用名称空间std;
#包括“候选者.h”
空读候选项()
{
cin>>nCandidates;
弦线;
getline(cin,line);
对于(int i=0;i
候选人
#ifndef CANDIDATES_H
#define CANDIDATES_H
#include <iostream>
#include <string>
using namespace std;
// Max # of candidates permitted by this program
extern const int maxCandidates = 10;
// Names of the candidates participating in this state's primary
extern string candidate[maxCandidates];
// Names of all candidates participating in the national election
extern std::string candidateNames[maxCandidates];
// How many candidates in the national election?
extern int nCandidates;
// How many delgates have been won by each candidate
extern int delegatesWon[maxCandidates];
extern int findCandidate (std::string name);
/**
* read the list of candidate names, initializing their delegate counts to 0.
*/
void readCandidates ();
#endif // CANDIDATES_H
#如果没有候选人#
#定义候选对象
#包括
#包括
使用名称空间std;
//该计划允许的最大候选人人数
外部常量int MAX候选者=10;
//参加本州初选的候选人姓名
外部字符串候选者[最大候选者];
//参加全国选举的所有候选人的姓名
extern std::string candidateNames[maxCandidates];
//全国选举有多少候选人?
外部内部条件;
//每个候选人赢得了多少德尔盖茨
外部内部委托人[最大候选人];
extern int findCandidate(std::string name);
/**
*阅读候选名称列表,将其委托计数初始化为0。
*/
使候选人无效();
#endif//H
primaries.cpp(这是我的主.cpp)
#包括
//#包括“candidates.cpp”
使用名称空间std;
#包括“候选者.h”
//为正在处理的状态分配了多少代理
int代表该状态;
//正在处理的州的初选中有多少候选人
int nCandidatesInPrimary;
//有多少州参加选举
内部状态;
//(所有州)有多少代表参加选举
整数=0;
//这个州在初选中投了多少票
总票数;
//在本州的初选中,每位候选人获得多少选票
int votesForCandidate[maxCandidates];
/**
*对于最近阅读的主要内容,请确定有多少学员
*每个候选人都赢了。
*/
int assignDelegatesToCandidates()
{
int remainingDelegates=DelegatesFortheState;
对于(int i=0;i剩余代表)
nDel=剩余代表;
代表[候选资格]+=nDel;
剩余代表-=nDel;
}
}
/**
*找到具有指定名称的候选人。返回数组索引
*对于已找到的候选项,如果找不到,则取消指定。
*/
int findCandidate(标准::字符串名称)
{
int result=nCandidates;
对于(int i=0;i=需要时)
如果在头文件中声明变量和函数,您仍然需要在某个地方定义它们,最好是在使用它们的.cpp
文件中(candidates.cpp
)
将您在函数中使用的所有变量的定义添加到候选者.cpp
文件中,这些变量将解决您的问题
顺便说一句,我同意这不是一个好的编程形式,但这可能超出了这个问题的范围。您不需要全局变量,因为它们不需要在实现文件(.cpp
)之外进行访问。您可以发布所有代码(hpp和cpp文件)吗?