2

ヘッダーファイルを設計した後に電子書籍から取得したクラスの本体をコンパイルしようとしていますが、次のエラーメッセージが表示されます。

[リンカーエラー]c:/crossdev/src/mingw-w64-svn/mingw-w64-crt/crt/crt0_c.c:18: `WinMain@16'への未定義の参照

ファイル:C:\ Users \ Chuks Joe \ Desktop \ collect2.exe

メッセージ:[エラー]ldが1つの終了ステータスを返しました

ヘッダーファイルはdice.hという別のファイルにあり、クラス本体はdice.cppという別のファイルにあります。クライアントプログラムは、testdice.cppと呼ばれる別のファイルにあります。

これらのファイルを配置するにはどうすればよいですか。また、プログラムを実行するためにすべてをリンクできるように、.soファイルをどこに配置すればよいですか。

私が使用しているコンパイラはDev-C++です。

4

2 に答える 2

0

コードを実行可能ファイルとしてリンク可能にするには、main()(またはWinMain()GUIプログラムの場合は)エントリポイントが必要です。クラス自体はC++の完全なプログラムではありません-実行はmain()関数から始まります。

何らかの理由で、GUI以外のアプリの場合でも、MinGWリンカーはリンクがないことについて文句を言いますが、WinMain()どちらmain()かがリンクを解決します。

通常はmain()orWinMain()関数を提供する必要がありますが、内部で提供するアプリケーションフレームワーク(通常はGUI)を使用している場合は例外です。

ほとんどの場合、クラスを使用するには、そのクラスのオブジェクトをインスタンス化し、そのインスタンスを介してそのメンバー関数を呼び出す必要があります。静的メンバー関数はオブジェクトインスタンスを必要としません。

例:

// main.cpp
#include <iostream>
#include "dice.h"

int main()
{
    cDice myDie ;
    std::cout << "Throw = " << myDie.roll() ; 
}
于 2013-03-21T19:13:15.310 に答える
0

コードを見ないとわかりにくい。リンカーがどのように機能するかは、この投稿で確認できます。あなたの場合、エラーは次のいずれかから発生する可能性が最も高いです。

  • ヘッダー ファイルで宣言した関数またはメソッドを使用しようとしていますが、ソース ファイルで定義するのを忘れています。
  • のオブジェクト ファイルのみを使用してリンカーを呼び出しており、 のオブジェクト ファイルをtestdice忘れていますdice
  • 未定義の関数はあなたのものですか? そうでない場合は、リンカーに外部ライブラリを追加する必要があります。

絞り込むには、 で定義されている他の関数を使用してみてくださいtestdice.cpp。その結果、リンカ エラーが増える場合は、すべてをリンクしていない可能性があります。エラーが追加されない場合は、関数を定義するのを忘れている可能性が高いか、ソース ファイルとヘッダー ファイルのプロトタイプがわずかに異なっています。

于 2013-03-21T19:00:21.197 に答える