我是C ++的初学者。我写了以下内容:
// GradeBook.h
#include <iostream>
#include <string>
using namespace std;
class GradeBook {
public:
GradeBook(string); // constructor that initializes courseName
void setCourseName(string); // function that sets the course name
string getCourseName(); // function that gets the course name
void displayMessage(); // function that displays a welcome message
private:
string courseName; // course name for this GradeBook
};
// GradeBook.cpp
#include <iostream>
#include "GradeBook.h"
using namespace std;
GradeBook::GradeBook(string name)
{
setCourseName(name);
}
void GradeBook::setCourseName(string name)
{
courseName = name;
}
string GradeBook::getCourseName()
{
return courseName;
}
void GradeBook::displayMessage()
{
cout << "Welcome to the grade book for\n" << getCourseName() << "!" << endl;
}
// main.cpp
#include <iostream>
#include "GradeBook.h"
using namespace std;
int main()
{
GradeBook gradeBook1("CS101 Introduction to C++ Programming");
GradeBook gradeBook2("CS102 Data Structures in C++");
cout << "gradeBook1 created for course: " << gradeBook1.getCourseName()
<< "\ngradeBook2 created for course: " << gradeBook2.getCourseName()
<< endl;
}
我正在使用KDevelop 4.4.1,然后我继续执行我的main.cpp,我得到了:
/家庭/ brallan /项目/ HOLA /构建&GT;使 链接CXX可执行文件 CMakeFiles / hola.dir / main.o:在函数main'中: /home/brallan/projects/Hola/main.cpp:8:未定义引用GradeBook :: GradeBook(std :: string)'
/home/brallan/projects/Hola/main.cpp:9:未定义引用GradeBook :: GradeBook(std :: string)'
/home/brallan/projects/Hola/main.cpp:12:JerderBook :: getCourseName()的未定义引用 /home/brallan/projects/Hola/main.cpp:11:对GradeBook :: getCourseName()的未定义引用 collect2:错误:ld返回1退出状态
make [2]:[hola]错误1
make [1]:[CMakeFiles / hola.dir / all]错误2
make:[all]错误2
失败了
如果我从Eclipse Juno CDT运行相同的代码,它会返回我:
gradeBook1 created for course: CS101 Introduction to C++ Programming
gradeBook2 created for course: CS102 Data Structures in C++
有人可以帮我从KDevelop运行吗?
更新:根据评论,KDevelop不会编译项目中的其他文件:s 我想这是要解决的问题。
答案 0 :(得分:4)
首先,将行#error
(或任何其他语法错误)添加到GradeBook.cpp的末尾。当您尝试构建该行时,确保您收到该行的编译错误。如果没有,请检查项目或makefile中文件引用的拼写和大小写。
如果您确实收到语法错误,或者您没有,但是您无法弄清楚文件未被引用的原因,请尝试下一步:从GradeBook.cpp中删除#error
,然后将#include "GradeBook.cpp"
添加到main.cpp的末尾。这有两个目的:它让你前进(现在应该能够构建和运行)并且它有助于缩小问题范围(如果它有效,你知道问题在于引用GradeGook.cpp,而不是它的内容)。
答案 1 :(得分:1)
您似乎没有编译GradeBook.cpp
答案 2 :(得分:0)
在项目文件夹中,有一个名为CMakeList.txt的文件,其上是属于项目的文件。我试图将文件GradeBook.cpp添加到add_executable行,但仍然无法正常工作。但是,当我用小写替换文件名,并转而修改我描述的行时,一切正常。我不确定如果文件名没有上限或类似的话,如果我将其完全按照调用的方式添加到此列表中,会出现什么错误。
然后,我重命名了文件gradebook.h和gradebook.cpp,并将gradebook.cpp添加到add_executable行。