0

我是 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,我得到了:

/home/brallan/projects/Hola/build> 使
链接 CXX 可执行 hola
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: 未定义对 GradeBook::getCourseName()'
/home/brallan/projects/Hola/main.cpp:11: 未定义引用 GradeBook::getCourseName()'
collect2: error: 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 我想这是要解决的问题。

4

3 回答 3

4

首先,将该行#error(或任何其他语法错误)添加到 GradeBook.cpp 的末尾。确保在尝试构建该行时收到编译错误。如果不是,请检查项目或 makefile 中文件引用的拼写和大小写。

如果您确实收到语法错误,或者如果您没有但无法弄清楚为什么没有引用该文件,请尝试以下操作:#error从 GradeBook.cpp 中删除,并添加#include "GradeBook.cpp"到 main.cpp 的末尾. 这有两个目的:它让你开始(现在应该能够构建和运行)并且它有助于缩小问题(如果它有效,你知道问题在于引用 GradeGook.cpp,而不是它的内容)。

于 2012-12-06T05:10:04.073 回答
1

看来您没有编译 GradeBook.cpp

于 2012-12-06T08:46:46.097 回答
0

在项目文件夹中,有一个名为 CMakeList.txt 的文件,上面是项目的一部分。我尝试将文件 GradeBook.cpp 添加到 add_executable 行,但仍然没有工作。但是,当我用小写替换文件名并修改我描述的行时,一切正常。我不确定如果文件名没有大写或类似的错误,如果我将它添加到此列表中,就像它所调用的一样。

然后,我重命名了文件gradebook.h 和gradebook.cpp 并将gradebook.cpp 添加到add_executable 行。

于 2012-12-07T01:15:57.343 回答