Я начинающий с 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 / проекты / Hola / build> сделать
Связывание исполняемого файла 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: неопределенная ссылка на 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
сделать: [все] Ошибка 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
Я думаю, что это проблема, которая должна быть решена.
Сначала добавьте строку #error
(или любая другая синтаксическая ошибка) до конца GradeBook.cpp. Убедитесь, что вы получили ошибку компиляции для этой строки, когда пытаетесь ее построить. Если нет, проверьте орфографию и заглавную букву ссылки на файл из проекта или make-файла.
Если вы получаете синтаксическую ошибку или не видите, но не можете понять, почему на файл не ссылаются, попробуйте следующее: Удалите #error
из GradeBook.cpp и добавить #include "GradeBook.cpp"
до конца main.cpp. Это служит двум целям: оно помогает вам (теперь он должен иметь возможность собирать и запускать) и помогает сузить проблему (если она работает, вы знаете, что проблема связана с обращением к GradeGook.cpp, а не с его содержимым).
Кажется, вы не компилируете GradeBook.cpp
В папке проекта находится файл с именем CMakeList.txt, и в нем находятся файлы, которые являются частью проекта. Я пытался добавить файл GradeBook.cpp в строку add_executable, но все равно не получилось. Однако, когда я заменил имена файлов строчными буквами и включил изменение строки, которую я описал, все работало правильно. Я не уверен, что является ошибкой, если имя файла не имеет верхнего или аналогичного значения, если я добавляю его в этот список точно так, как он называется.
Затем я переименовал файлы gradebook.h и gradebook.cpp и добавил gradebook.cpp в строку add_executable.