c++ 使用KDevelop 4.4.1未定义的引用

toiithl6  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(213)

我是C++的初学者。我写了以下内容:

  1. // GradeBook.h
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5. class GradeBook {
  6. public:
  7. GradeBook(string); // constructor that initializes courseName
  8. void setCourseName(string); // function that sets the course name
  9. string getCourseName(); // function that gets the course name
  10. void displayMessage(); // function that displays a welcome message
  11. private:
  12. string courseName; // course name for this GradeBook
  13. };
  14. // GradeBook.cpp
  15. #include <iostream>
  16. #include "GradeBook.h"
  17. using namespace std;
  18. GradeBook::GradeBook(string name)
  19. {
  20. setCourseName(name);
  21. }
  22. void GradeBook::setCourseName(string name)
  23. {
  24. courseName = name;
  25. }
  26. string GradeBook::getCourseName()
  27. {
  28. return courseName;
  29. }
  30. void GradeBook::displayMessage()
  31. {
  32. cout << "Welcome to the grade book for\n" << getCourseName() << "!" << endl;
  33. }
  34. // main.cpp
  35. #include <iostream>
  36. #include "GradeBook.h"
  37. using namespace std;
  38. int main()
  39. {
  40. GradeBook gradeBook1("CS101 Introduction to C++ Programming");
  41. GradeBook gradeBook2("CS102 Data Structures in C++");
  42. cout << "gradeBook1 created for course: " << gradeBook1.getCourseName()
  43. << "\ngradeBook2 created for course: " << gradeBook2.getCourseName()
  44. << endl;
  45. }

我使用KDevelop 4.4.1,然后我继续执行我的main.cpp,我得到了:
/home/brallan/projects/Hola/build> make
链接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()的引用'
collect 2:错误:ld返回% 1退出状态
make[2]:[hola]错误1
make[1]:[CMakeFiles/hola.dir/all]错误2
make:[all]错误2
失败
如果我从Eclipse Juno CDT运行相同的代码,它会返回:

  1. gradeBook1 created for course: CS101 Introduction to C++ Programming
  2. gradeBook2 created for course: CS102 Data Structures in C++

谁能帮我从KDevelop运行它?

**更新:**根据评论,KDevelop没有编译项目中的其他文件:s我猜这是需要解决的问题。

j1dl9f46

j1dl9f461#

首先,将#error行(或任何其他语法错误)添加到GradeBook.cpp的末尾。请确保在尝试构建该行时得到该行的编译错误。如果没有,请检查项目或makefile中的文件引用的拼写和大写。
如果您确实得到了语法错误,或者如果您没有,但您无法找出文件没有被引用的原因,请尝试以下操作:从GradeBook.cpp中删除#error,并将#include "GradeBook.cpp"添加到main.cpp的末尾。这有两个目的:它让你继续前进(现在应该能够构建和运行),它有助于缩小问题(如果它工作,你知道问题出在引用GradeGook.cpp,而不是它的内容)。

tjrkku2a

tjrkku2a2#

看来您没有编译GradeBook.cpp

63lcw9qa

63lcw9qa3#

在项目文件夹中,有一个名为CMakeList.txt的文件,其中包含项目的一部分文件。我尝试将文件GradeBook.cpp添加到add_executable行,但仍然不起作用。然而,当我用小写替换文件名,并修改我所描述的行时,一切都正常工作。我不知道什么是错误的,如果文件名没有上限或类似的,如果我把它添加到这个列表中,因为它是所谓的。
然后,我重命名了文件gradebook.h和gradebook.cpp,并将gradebook.cpp添加到add_executable行。

相关问题