2017-11-07 6 views
0
#include<iostream> 
using namespace std; 

class testClass 
{ 
public: 
    int sum(); 
    //Postcondition: Returns the sum of the 
    //    private data members. 
    void print(); 
    //Prints the values of the private data members. 
    testClass(); 
    //default constructor 
    //Postcondition: x = 0; y = 0; 
    testClass(int a, int b); 
    //Constructor with parameters 
    //Initializes the private data members to the 
    //values specified by the parameters. 
    //Postconditon: x = a; y = b 
private: 
    int x; 
    int y; 
}; 

int sum() 
{ 
    int a, b, total; 
    total = a + b; 
    return total; 
} 

void print() 
{ 
    cout<< "sum = " << sum() << endl; 
} 
testClass::testClass() 
{ 
    x = 0; 
    y = 0; 
} 

testClass::testClass(int a, int b) 
{ 
    x = a; 
    y = b; 
} 

このプログラムは100%コンパイルしますが、実行すると次のエラーが発生します。 -------------- ------設定:mingw5 - CUIデバッグ、ビルダータイプ:MinGW --------------------:未定義の `testClass :: sum() '

ファイルの依存関係をチェックしています... リンクしています。 ... [エラー] C:\のDev-CPP \ MAlikChapter1 \ Exercise14.cpp:56:testClass::sum()' [Error] C:\Dev-Cpp\MAlikChapter1\Exercise14.cpp:58: undefined reference to TestClassを未定義の参照::プリント()」 [エラー] collect2は:ldは

コンプリートメイクExercise14を1つの終了ステータスを返しました:3エラー(s )、0警告(秒)

int main() 
{ 
    int m, n; 
    testClass mySum; 
    testClass myPrint; 
    mySum.sum(); 

    myPrint.print(); 
} 

これはからのプログラム例です:マリク「Cを使用してデータ構造++」クラス外でそれらを実装する際に

+0

ここで、 'testClass :: sum'と' testClass :: print'を実装しましたか? –

+0

'sum'と' print'関数を宣言しますが、 'sum'と' print'の前に 'testClass ::'を追加するのを忘れて –

+0

と決して定義しないでください。クラス外で定義する場合は、追加する必要があります –

答えて

4

が機能sumprintの名前の前にtestClass::を追加します。

int testClass::sum() 
{ 
    // ... 
} 
void testClass::print() 
{ 
    // ... 
} 

これは未定義の参照エラーを解決しますが、sum関数に別のエラーがあります。ローカルab変数を初期化せずに宣言してから、式a + bでそれらを使用します。何かで初期化するか、またはクラスメンバーxyを合計する場合は、abの代わりにこれらの変数を使用すると、testClass::を追加した後にアクセスできます。

+0

ありがとうございます。 testClass :: sum()とtestClass :: print()を追加して初期化すると、100%正常に機能しました。 – Bopaki

+0

この質問を今すぐ閉じることができます – Bopaki

+0

私の答えは、それが助けられた場合、受け入れられた答えとしてマークすることを検討してください。 –