0

前の問題で設計されたクラスでさまざまな操作をテストするテスト プログラムを作成します。clockTypeメンバー関数としてのオーバーロードの定義を示しています。Dev C++ コンパイラを使用してコンパイルすると、次のエラーが発生します。

エラーは次のとおりです。

[link error] undefined reference "WinMain@16'
Id returned 1 exit status

これは私のコードです:

#include <iostream>

using namespace std;

class clockType
{
public:
      void setTime (int hours, int minutes, int seconds);
      void getTime (int& hours, int& minutes, int& seconds) const;     
      clockType operator++();
      bool operator==(const clockType& otherClock) const;
      bool operator!= (const clockType& otherClock) const;
      bool operator<=(const clockType& otherClock) const;
      bool operator<(const clockType& otherClock) const;
      bool operator>=(const clockType& otherClock) const;
      bool operator>(const clockType& otherClock) const;
      clockType ();
      clockType (int hours = 0, int minutes = 0, int seconds = 0);
private:
        int hr;
        int min;
        int sec;
};
clockType clockType::operator++()
{
          sec++;
          if (sec > 59)
          {
                  sec = 0;
                  min++;
                  if (min > 59)
                  {
                          min = 0;
                          hr++;
                          if (hr > 23)
                          hr = 0;
                  }
          }
          return *this;
}
bool clockType::operator==(const clockType& otherClock) const
{
     return (hr == otherClock.hr && min == otherClock.min && sec == otherClock.sec);
}
bool clockType::operator<=(const clockType& otherClock) const
{
     return ((hr < otherClock.hr) || (hr == otherClock.hr && min < otherClock.min) || (hr == otherClock.hr && min == otherClock.min && sec <= otherClock.sec));
}
bool clockType::operator!=(const clockType& otherClock) const
{
          return (hr != otherClock.hr || min != otherClock.min || sec != otherClock.sec);
}
bool clockType::operator<(const clockType& otherClock) const
{
     return ((hr < otherClock.hr) || (hr == otherClock.hr && min < otherClock.min) || (hr == otherClock.hr && min == otherClock.min && sec < otherClock.sec));
}
bool clockType::operator>=(const clockType& otherClock) const
{
     return ((hr > otherClock.hr) || (hr == otherClock.hr && min > otherClock.min) || (hr == otherClock.hr && min == otherClock.min && sec >= otherClock.sec));
}
bool clockType::operator>(const clockType& otherClock) const
{
     return ((hr > otherClock.hr) || (hr == otherClock.hr && min > otherClock.min) || (hr == otherClock.hr && min == otherClock.min && sec > otherClock.sec));
}

void clockType::setTime(int hours, int minutes, int seconds)
{
     if (0 <= hours && hours < 24)
     hr = hours;
     else
     hr = 0;
     if (0 <= minutes && minutes < 60)
     min = minutes;
     else
     min = 0;
     if (0 <= seconds && seconds < 60)
     sec = seconds;
     else
     sec = 0;
}
void clockType::getTime(int& hours, int& minutes, int& seconds)const
{
   hours = hr;
   minutes = min;
   seconds = sec;
}
clockType::clockType(int hours, int minutes, int seconds)
{
 setTime(hours, minutes, seconds);
}

この問題に関する助けをいただければ幸いです。私はプログラミングが得意ではなく、なぜこの種のエラーが発生するのかわかりません。これまでクラス用に作成した他のプログラムは使用していません。

4

3 に答える 3

1

Bloodshed社によって作成されたDev-C++と呼ばれるIDEが絶対にあります。これは廃止されましたが、無料で使いやすく、優れたインターフェイスを備えているため、かなり互換性があり、好まれていると思います。

OPの質問に関しては、プロジェクトの設定でアプリケーションのエントリポイントがあることを確認する必要があります(私は何年もDev-C ++を使用していないので、周りを見てください)、アプリケーションの種類、オプションを示すものがありますリストされるのは次のようなものになります

Console Application
GUI Application or maybe Win32 Application
Static Library
Dynamic Library

これらはすべて異なるタイプのアプリケーションであり、デフォルトでプログラムにWin32アプリケーション設定があるように見えます。この場合、リンカーはWinMainを探していますが、プロジェクトでWinMainを提供していません。単純なコンソールアプリケーションが必要な場合は、単純なメイン関数を必要とするその設定へのアプリケーションタイプ、Win32とコンソールの両方のアプリケーションエントリポイント関数の例は次のとおりです。

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iShow)
{
return 0;
}

または、単純なコンソールアプリケーションの場合

int main(int argc, char* argv[])
{
return 0;
}

これらの関数は、アプリケーションが何かを実行するためにアプリケーションの残りの部分をプラグインする必要がある場所です。このエントリポイントがないと、アプリケーションを適切にコンパイルおよびリンクすることさえできません。

アプリケーションに実際にクラスを使用させる例(関数を使用せずに)

int main(int argc, char* argv[])
{
   clockType  myClockType;
   myClockType.setTime(12, 30, 45);

   return 0;
}
于 2012-08-11T23:45:08.460 に答える
1

機能がありませんint main()。クラスは実際にはそれ自体ではプログラムにコンパイルされません。それを にコンパイルすることはできますがDLL、関数なしで実行可能ファイルにコンパイルすることはできませんmain。より具体的には、プログラムはコンパイルされますが、リンカは、プログラムのエントリ ポイントが必要であると不平を言っています。

これをプログラムの一番下に置くと: ただし、これは単に未定義の参照がなくなるだけです。

int main(){
    return 0;
}

プログラムを実際にテストするには、次のようないくつかのテストを実行する必要があります。

#include <iostream>

// your class code here.

int main(){
    Clocktype clock;
    clock.setTime(15, 42, 13);
    int h, m, s;
    clock.getTime(&h, &m, &s);
    std::cout << h << m << s << std::endl;
    return 0;
}
于 2012-08-11T23:26:05.520 に答える
0

これはコンパイラではなくリンク エラーです。リンカがメイン関数を見つけようとしている (Windows アプリケーションのエントリ ポイントを提供する) ことを示しています。

コンパイル自体はうまく機能します (コンパイルが成功した後、リンク手順が機能します)。

于 2012-08-11T23:27:53.773 に答える