Неопределенная ссылка с использованием KDevelop 4.4.1

Я начинающий с 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
Я думаю, что это проблема, которая должна быть решена.

0

Решение

Сначала добавьте строку #error (или любая другая синтаксическая ошибка) до конца GradeBook.cpp. Убедитесь, что вы получили ошибку компиляции для этой строки, когда пытаетесь ее построить. Если нет, проверьте орфографию и заглавную букву ссылки на файл из проекта или make-файла.

Если вы получаете синтаксическую ошибку или не видите, но не можете понять, почему на файл не ссылаются, попробуйте следующее: Удалите #error из GradeBook.cpp и добавить #include "GradeBook.cpp" до конца main.cpp. Это служит двум целям: оно помогает вам (теперь он должен иметь возможность собирать и запускать) и помогает сузить проблему (если она работает, вы знаете, что проблема связана с обращением к GradeGook.cpp, а не с его содержимым).

4

Другие решения

Кажется, вы не компилируете GradeBook.cpp

1

В папке проекта находится файл с именем CMakeList.txt, и в нем находятся файлы, которые являются частью проекта. Я пытался добавить файл GradeBook.cpp в строку add_executable, но все равно не получилось. Однако, когда я заменил имена файлов строчными буквами и включил изменение строки, которую я описал, все работало правильно. Я не уверен, что является ошибкой, если имя файла не имеет верхнего или аналогичного значения, если я добавляю его в этот список точно так, как он называется.

Затем я переименовал файлы gradebook.h и gradebook.cpp и добавил gradebook.cpp в строку add_executable.

0
По вопросам рекламы [email protected]