web-dev-qa-db-ja.com

WinMain @ 16へのC ++未定義参照(Code :: Blocks)

Code :: BlocksでC++を学習しています。新しいクラスを作成しようとするたびに、次のようなエラーメッセージが表示されます。

undefined reference to `WinMain@16'

これが私が使ってきたコードです:

メインクラス

#include "Lime.h"
#include <iostream>
using namespace std;
int main()
{
    Lime lime;
    return 0;
}

ライムクラス(.ccp):

#include "Lime.h"
#include <iostream>
using namespace std;
Lime::Lime()
{
    cout<<"Hi!";
}

ライムヘッダー(.h):

#ifndef Lime_H
#define Lime_H
class Lime
{
    public:
        Lime();
};
#endif

誰かが知っている場合は、それを修正する方法を教えてください、教えてください!

6
Atom

exactと同じチュートリアルでexactと同じ問題が発生しました。

これを解決するには? CodeBlocksを再起動すると、このエラーが解消されることがわかりました。ファイルの作成方法や構文には関係ありません。再起動でうまくいきます。

なぜこれが起こるのですか?私がワイルドな推測をしなければならなかった場合、私はCodeBlocksが実際にヘッダー/ cppファイルを作成すると思いますが、それらを使用可能にする適切な方法でプロジェクトにリンクしません(ただし、リンクするように要求します)それらを作成した後のプロジェクト)。これは推測です。

コンソールアプリケーションの代わりにWindows GUIコンソールアプリケーションを作成していると言ってこれについてコメントした人もいることは理解していますが、そうではありません。 Buckyがビデオで説明するように、私もシンプルなコンソールアプリケーションを作成していました。

10
user3308043

これを試してください:Settings-> Compiler、タブをクリックBuild options、チェックボックスを選択

現在コンパイル中のファイルのディレクトリをコンパイラ検索ディレクトリに明示的に追加します

追伸.

次回新しいクラスを作成するときは、File policyセクション、チェックボックスをオンにしてください

  • プロジェクトにパスを追加

  • ヘッダーと実装ファイルは同じフォルダーにある必要があります

ただし、[〜#〜] not [〜#〜]選択してください

相対パスを使用

9
Milo Lu

メニューバーの"Project" --> "Build Options . . ."に移動します
"Linker Settings"タブに移動
"Link libraries"パネルで、"Add"をクリックします
これを次のフィールドに書きます:mingw32;libSDL.a;libSDLmain.a
"Search directories" --> "Linker"タブに移動
MinGWライブラリフォルダーを追加します!幸運を!!

3
Saleh

コンソールアプリケーションではなく、Windowsアプリケーションを構築しているようです。したがって、mainではなく WinMain 関数がプログラムのエントリポイントとして必要です。

私はCodeBlocksにそれほど精通していませんが、プロジェクト設定のどこかに、プログラムが実行されているサブシステムを指定できる設定があります。おそらく「Windows」と表示され、オプションの1つは「コンソール」でなければなりません。したがって、本当にコンソールアプリケーションが必要な場合は、この値に変更できます。 coutを使用しているという事実から判断すると、コンソールアプリケーションが必要だと思います。その場合は、mainをエントリポイントとして残すことができます。

新しいプロジェクトを作成するときに、コンソールアプリケーションを選択することもできます。 このスクリーンショット とテキストが役立つはずです。

注:もう少し確認しましたが、Project/target option [ビルドターゲット]タブに移動して、ビルドしているサブシステムを確認できます。タブでは「タイプ」と呼ばれ、ドロップダウンオプションの1つは「コンソールアプリケーション」になります。

2
Sean

私もこの問題を抱えていました!問題は、自分のメイン関数を特定の名前空間の下に置き、クラスがこの名前空間の一部ではなく、それらの「メイン」がないように見えることでした。名前空間を削除するか、クラスを同じ名前空間に追加するとすぐに、ビルドの問題はなくなりました。

0
Beatrice

以前にも問題に遭遇しましたが、私の解決策は、ヘッドファイルを含む多くのファイルがある場合にプロジェクトを作成することです。このようにして、#include "Burrito.h"をコーディングすると、エディターはプロジェクト内のヘッドファイルを検索します。特にDev-cppエディターの場合はそうです。

0
user3567012

これを修正するには、コンパイラ設定ダイアログを開いて[OK]をクリックします。何も変わっていません。そしてそれは本当にうまくいきます!

しかし、新しいクラスをもう一度追加すると、この問題が繰り返されます。したがって、新しいクラスを作成するたびに、設定ダイアログを開く/閉じるだけです。

0

これを試してください:設定->コンパイラー、ビルドオプションタブをクリックし、チェックボックスを選択します

現在コンパイル中のファイルのディレクトリをコンパイラ検索ディレクトリに明示的に追加します

私はこれをしました、そして私は今完璧に働きます

0
chirag

修正:「WinMain @ 16」への未定義の参照または「ブロック名::クラス名()」への未定義の参照がコードブロックのエラーである

同じ問題がありました。実際、修正は非常に簡単でした。 Menuバーで

project->ビルドオプションチェックマークを付けますg ++をC++ 11 ISO C++言語標準に準拠させる[-std = c ++ 11]
次に[ok]をクリックし、プロジェクトをビルドして実行します[F9]スクリーンキャプチャイメージを表示するには、ここをクリックしてください。個別のクラスファイルコードブ​​ロックの修正

0
Wahid

「main.cpp」がプロジェクトに含まれていないため、この問題が発生しました。再びそのエラーが表示される場合は、プロジェクトにすべてのファイルが含まれていることを確認してください。

0

コードブロックを開いて(プロジェクト名).cbpファイルを選択すると、スタートタブに表示される[既存のプロジェクトを開く]を選択するだけです。プログラムはプロジェクトだけでなく、クラス名.hおよび.cppファイルも開きます...ビルドして実行します...コードを実行すると、問題なく動作します。