0

私はクラスのプログラムをやっていて、先生は私たちが実装しなければならなかったCppファイルを私たちにくれました。メイン以外はすべて彼によって書かれましたが、奇妙なエラーが発生します。どんな助けでも素晴らしいでしょう。これが私のコードです。

// **************************************************************************
//
// Counter.cpp
//
// Defines and tests class CounterType, which is used to count things.
// CounterType contains both a default constructor and a constructor that
// sets the count to a specified value, plus methods to increment, decrement,
// return, and output the count.  The count is always nonnegative.
//
// **************************************************************************
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

class CounterType
{
public:
    CounterType();
    //Initializes the count to 0.

    CounterType(int initCount);
    //Precondition: initCount holds the initial value for the count.
    //Postcondition:
    //  If initCount > 0,initializes the count to initCount.
    //  If initCount <= 0,initializes the count to 0.

    void increment();
    //Postcondition:
    //  The count is one more than it was.

    void decrement();
    //Postcondition:
    //  If the count was positive, it is now one less than it was.
    //  If the count was 0, it is still 0

    int getCount();
    void output(ostream& outStream);
    //Precondition: outStream is ready to write to
    //Postcondition: count has been written to outStream

private:
    int count;

};

 void increment();
 void decrement();
 int getCount();
 void output(ostream& outStream);

 int main()
{
    CounterType Test;

    increment();
    decrement();
    getCount();

}

CounterType::CounterType()
{
    count = 0;
}

CounterType::CounterType(int initCount)
{
    if (initCount >= 0)
        count = initCount;
    else
        count = 0;
}

void CounterType::increment()
{
    count++;
}

void CounterType::decrement()
{
    if (count > 0)
        count--;
}

int CounterType::getCount()
{
    return count;
}

void CounterType::output(ostream& outStream)
{
    outStream << count;
}

そして、ここにエラーがあります。

エラー1エラーLNK2028:未解決のトークン(0A000330) "void __cdecl decrement(void)"(?decrement @@ $$ FYAXXZ)が関数 "int __cdecl main(void)"(?main @@ $$ HYAHXZ)J:\で参照されていますMCM 10.05 \ MCM 10.05 \ MCM10.obj MCM 10.05

4

3 に答える 3

5

決して定義しないグローバル関数increment()decrement()、およびを宣言しています。getCount()それらを呼び出すmain()と、リンカーがそれらの定義を見つけることができないため、リンクエラーが発生します。

Counterおそらく、次のように、オブジェクトのメンバー関数を呼び出すつもりでした:

int main()
{
    CounterType Test;

    Test.increment();
    Test.decrement();
    Test.getCount();
}

その場合は、グローバル関数の宣言を削除する必要があります。

// THESE DECLARATIONS BEFORE main() SHOULD NOT BE THERE! JUST REMOVE THEM
// void increment();
// void decrement();
// int getCount();
// void output(ostream& outStream);
于 2013-01-24T16:39:22.550 に答える
1

あなたは2つの間違いをしました:

1)コードを見ると、次の関数を追加で宣言しているようです

 void increment();
 void decrement();
 int getCount();
 void output(ostream& outStream);

クラスですでに宣言を提供しているため、再度宣言する必要はありません。

2) main 内では、この方法で関数を呼び出しています。

increment();
decrement();
getCount();

この方法で呼び出すとグローバル関数が呼び出されるため、これはおそらくやりたくないでしょう。クラス関数を呼び出す正しい方法は、クラス オブジェクトによるものです

Test.increment();
Test.decrement();
Test.getCount();

この 2 つの変更を修正するだけで、プログラムの準備は完了です。:)

于 2013-01-24T17:35:02.357 に答える
1

呼び出されるグローバル関数を宣言し、decrement()それを定義しません。

が存在しますがCounterType::decrement()、それは別の機能です。

increment()と についても同様getCount()です。

于 2013-01-24T16:39:56.673 に答える