Компиляция интерфейса C ++ - PullRequest
0 голосов
/ 19 мая 2009

EDIT:

Я разобрался с решением. Я не добавлял -combine в мои инструкции по компиляции, и это вызывало ошибки.


Я работаю над книгой Deitel and Deitel C ++ Как программировать и столкнулся с проблемой сборки и компиляции интерфейса C ++ с использованием g ++. Проблема в том, что я объявил класс в файле .h и определил реализацию в файле .cpp, но не могу понять, как заставить его скомпилировать и работать, когда я пытаюсь скомпилировать тестовый файл, который я написал. Ошибка g ++, которую я получаю:

Undefined symbols:
  "GradeBook::GradeBook(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)", referenced from:
      _main in ccohy7fS.o
      _main in ccohy7fS.o
  "GradeBook::getCourseName()", referenced from:
      _main in ccohy7fS.o
      _main in ccohy7fS.o
ld: symbol(s) not found
collect2: ld returned 1 exit status<

Если бы кто-то мог указать мне правильное направление, я был бы благодарен.

Мой заголовочный файл:


//Gradebook 6 Header
//Purpose is to be the class declaration for the class Gradebook 6
//Declare public, privates, and function names. 

#include  //the standard c++ string class library
using std::string;

//define the class gradebook
class GradeBook
{
    public:  //all the public functions in the class

     GradeBook(string ); //constructor expects string input
     void setCourseName (string ); //method sets course name--needs string input
     string getCourseName(); //function returns a string value
     void displayMessage();  //to console

    private: //all private members of the class
        string courseName; 
}; //ends the class declaration 

Мой файл .cpp:


//Gradebook 6
// The actual implementation of the class delcaration in gradebook6.h

#include 
using std::cout;
using std::endl;

#include "gradebook6.h" //include the class definition

//define the class gradebook

GradeBook::GradeBook(string name) //constructor expects string input
{
    setCourseName(name); //call the set method and pass the input from the constructor. 
}

void GradeBook::setCourseName (string name) //method sets course name--needs string input
{
    courseName = name; //sets the private variable courseName to the value passed by name
}

string GradeBook::getCourseName() //function returns a string value
{
    return courseName;
}

void GradeBook::displayMessage()  //function does not return anything but displays //message to console
{
   cout //message here, the pre tag isn't letting it display
} //end function displayMessage

Наконец, тестовый файл, который я написал, чтобы реализовать интерфейс и протестировать его.


// Gradebook6 Test
// Program's purpose is to test our GradeBook5 header file and file seperated classes

#include 
using std::cout;
using std::endl;

#include "gradebook6.h" //including our gradebook header from the local file.

//being program
int main()
{
    //create two gradebook objects 
    GradeBook myGradeBook1 ("CSC 101 Intro to C++ Programming"); //create a default object using the default constructor
    GradeBook myGradeBook2 ("CSC 102 Data Structures in C++");

    //display intitial course name
    cout //another output message here that the code tag does not like

    return 0;
}

Ответы [ 2 ]

1 голос
/ 19 мая 2009

То, что вы видите, это ошибки компоновщика (указание находится в бите "ld return": ld - компоновщик). Вам нужно либо передать все файлы .cpp в g ++, чтобы он скомпилировал и связал их, либо использовать ключ -c последнего, чтобы создать .o из .cpp, а затем использовать THAT .o для дальнейшей команды g ++ для сборки (ссылка) исполняемые файлы.

1 голос
/ 19 мая 2009

Похоже, вам просто нужно связать в объектном файле GradeBook.cpp ваш конечный исполняемый файл. Хотите опубликовать свой make-файл или то, как вы его создаете?

...