使用KDevelop 4.4.1的未定义参考

时间:2012-12-03 22:59:44

标签: c++ reference kdevelop

我是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 我想这是要解决的问题。

3 个答案:

答案 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行。