0

編集:

私は解決策を見つけました。コンパイル命令に-combineを追加していなかったため、エラーが発生していました。


私はDeitelとDeitelの本C++How to Programを読んでいる途中で、g++を使用したC++インターフェイスの構築とコンパイルで問題が発生しました。問題は、.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;
}
4

2 に答える 2

1

表示されているのはリンカエラーです(表示は「ldreturned」ビットにあります。ldはリンカです)。すべての.cppファイルをg++に渡してコンパイルしてリンクするか、後者の-cスイッチを使用して.cppから.oを作成し、さらにg++コマンドでその.oを使用してビルドする必要があります。 (リンク)実行可能ファイル。

于 2009-05-19T01:08:20.170 に答える
1

GradeBook.cppオブジェクトファイルを最終的な実行可能ファイルにリンクする必要があるようです。あなたのmakefileまたはあなたがそれを構築している方法を投稿することに気をつけますか?

于 2009-05-19T00:52:12.543 に答える