私は以下のような簡単なコードを実行していますが、次の2つのエラーがあります。
#include <iostream>
#include <string>
using namespace::std;
template <class Type>
class Stack
{
public:
Stack (int max):stack(new Type[max]), top(-1), maxsize(max){}
~Stack (void) {delete []stack;}
void Push (Type &val);
void Pop (void) {if (top>=0) --top;}
Type& Top (void) {return stack[top];}
//friend ostream& operator<< (ostream&, Stack&);
private:
Type *stack;
int top;
const int maxSize;
};
template <class Type>
void Stack <Type>:: Push (Type &val)
{
if (top+1<maxsize)
stack [++top]=val;
}
エラー:
MSVCRTD.lib(crtexew.obj):エラーLNK2019:関数
_WinMain@16
で参照されている未解決の外部シンボル___tmainCRTStartup
私は何をすべきか?
これはリンカーの問題です。
[プロパティ]-> [リンカー]-> [システム]-> [サブシステム](Visual Studio)を変更してみてください。
fromWindows(/ SUBSYSTEM:WINDOWS)toConsole(/ SUBSYSTEM:CONSOLE)
他の人が述べたように、サブシステムをコンソールに変更するとエラーは消えます。
または、Windowsサブシステムを保持したい場合は、___tmainCRTStartup
を定義していないため、エントリポイントが何であるかを示すことができます。これを行うには、次をProperties-> Linker-> Command lineに追加します。
/ ENTRY: "mainCRTStartup"
このようにして、コンソールウィンドウを取り除きます。
この問題が発生し、Qtを使用している場合-qtmain.libまたはqtmaind.libをリンクする必要があります
次の行を持つ<tchar.h>
を含めます。
#define _tWinMain wWinMain
Unicode文字セットを使用しているが、エントリが設定されていない場合は、/ ENTRY: "wWinMainCRTStartup"を指定できます
他の人が言ったようにConsole (/SUBSYSTEM:CONSOLE)
に変更することに加えて、プロパティ->リンカ->詳細->エントリポイントでエントリポイントを変更する必要があるかもしれません。 mainCRTStartupに設定します。
特に指定しない限り、Visual StudioはmainではなくWinMain関数を検索しているようです。
メイン機能が表示されません。
主な機能があることを確認してください。
例:
int main(int argc, TCHAR *argv[]){
}
それがうまくいくことを願っています。 :)
プロジェクトがDllである場合、リンカがコンソールプログラムをビルドしたい場合があります。プロジェクトのプロパティを開きます。一般設定を選択します。構成タイプDynamic Library there(.dll)を選択します。
そのソースファイルを実行可能ファイルに変換しようとしましたが、必須のエントリポイントであるmain
関数が定義されていないため、明らかに不可能です。ファイルmain.cppを追加し、main関数を定義します。コマンドラインで作業している場合(これは疑わしい)、/c
を追加して、リンクのみではなくコンパイルのみに追加できます。これによりオブジェクトファイルのみが生成され、静的または共有ライブラリまたはアプリケーションにリンクする必要があります(この場合、mainが定義されたオブジェクトファイルが必要です)。
_WinMain
は、リンク時のmain
のMicrosoftの名前です。
また、あなたはまだコードを実行していない、あなたはcompiling(そしてリンク)です。 C++はインタープリター言語ではありません。
私のこの答えをどこに掲載すればいいかわかりませんが、それは正しい場所だと思います。今日このエラーに出くわしましたが、サブシステムを切り替えても何も変わりませんでした。
64ビットのlibファイルを32ビット(x86)に変更すると、私にとってはうまくいきました。
実際にmain()の代わりに_ tWinMain()を使用する場合は、プロジェクトに関連する構成が
_ tWinMain()が定義されているc/cppファイルで、以下を追加します。
#include <Windows.h>
#include <tchar.h>
CMakeを使用している場合、コンソールアプリケーションでSET(GUI_TYPE WIN32)
を設定すると、このエラーが発生することもあります。
上記のエルダイトの提案は、99.99%のケースで問題を解決します。彼らがそうしなかったのは私の運だった。私の場合、別のWindowsプロジェクトのヘッダーファイルを含めていたことが判明しました。案の定、そのファイルの一番下でディレクティブを見つけました:
#pragma comment(linker, "/subsystem:Windows")
言うまでもなく、この行を削除することで問題が解決しました。