2012-04-30 6 views
0

main.cppの#included "theclassname.h"クラスにヘッダーファイルを作成しましたが、コンパイルしようとすると "ClassName :: TheConstructor(bool、int * 、std :: basic_string、std :: allocator>) ""メインC++でのクラスの問題

私はClassname.cppファイル内で "ClassName :: start"という名前のコンストラクタと関数をコーディングしましたが、何らかの理由でこの未定義参照の問題が発生していますこのスタート関数と私のcppファイルにもコード化されている私のデストラクタのために。ヘッダーファイル内でコード化された関数にメインで行うすべての呼び出しはこのエラーをトリガーしませんが、私の.cppファイルでコード化された関数へのすべての呼び出しでこれがトリガーされます。

私はこれについて多くの投稿を見ましたが、正しいパラメータと戻り値の型で適切にコード化し、関数名がヘッダーファイルで定義されているものと同じであることを確認しました。私が10回以上それをチェックしたので何かスペルミスの他にこれを引き起こしている可能性があります。

おかげ

#ifndef THECLASSNAME_H 
#define THECLASSNAME_H 
#include <iostream> 

class TheClassName { 
public: 
    TheClassName(bool theBool=true, int *theArray=0, 
     std::string message="-1"); 
~TheClassName(); 
void start(); 
void setBool(bool theBool) {aBool=theBool;} 
bool getBool() {return aBool;} 
void setMessage(std::string message) {mssg=message;} 
std::string getMessage() {return mssg;} 
std::string getHello() {return hello;} 
private: 
int *anArray; 
bool aBool; 
std::string mssg; 
std::string hello; 

void aFunction1(bool); 
void aFunction2(); 
void aFunction3(); 

void aFunction4(); 
}; 

#endif 

申し訳ありませんが、誰もそれを固定!私のメイクファイルでは、私は

exec1: main.o classname.o 
    g++ -o exec1 main.o 

代わりの

exec1: main.o classname.o 
    g++ -o exec1 main.o classname.o 

はそんなに皆さんありがとうございました!

+4

コードを記述しようとするのではなく、コード(または少なくともコードの簡略化された代表バージョン)を投稿する必要があります。 –

+0

.cppファイルはプロジェクトの一部ではないようです。プロジェクトに追加すると、コンパイラとリンカーは関数定義を見つけます。 – tmpearce

+0

私は、あなたの前の質問(http://stackoverflow.com/questions/10386144/constructor-parameter-issue-c)を言い換えて/編集しておくべきだと思います。 –

答えて

2

リンカフェーズでエラーが発生しているようです。また、ヘッダーファイルだけでなく、C++クラス定義を持つファイルもコンパイルしていますか?関数の定義とは別にC++ファイルを用意し、このファイルもコンパイルし、リンカーのコマンドラインにオブジェクトファイルをインクルードする必要があります。最終的な実行可能ファイルをリンクするときに未定義の参照エラーが出ないようにします。

+0

技術的には、別々のファイルは必要ありませんが、間違いなくあなたはすべきです。 – chris

+0

真。私はちょうどよい慣行を植えようとしていました:) –

+0

私のメイクファイルには – JDN

1

コードを投稿し、可能であればビルドコマンドと出力も投稿してください。

これはコンパイルの問題ではなくリンケージです。コンストラクタとデストラクタ宣言が含まれているコンパイルユニットが実行可能ファイルにリンクされていないように聞こえます。つまり、リンカは関数を見つけることができません。