Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误LNK2019:函数uu tmainCRTStartup msvcrdt.lib(crtexe.obj)中引用的未解析外部符号main_C++_Templates_Visual C++_Main_Lnk2019 - Fatal编程技术网

C++ 错误LNK2019:函数uu tmainCRTStartup msvcrdt.lib(crtexe.obj)中引用的未解析外部符号main

C++ 错误LNK2019:函数uu tmainCRTStartup msvcrdt.lib(crtexe.obj)中引用的未解析外部符号main,c++,templates,visual-c++,main,lnk2019,C++,Templates,Visual C++,Main,Lnk2019,我一直收到以下两个错误,我不知道为什么 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup MSVCRTD.lib(crtexe.obj) error LNK1120: 1 unresolved externals 确保我将其作为控制台运行[即使在链接器属性中,它也显示为控制台] 我正在使用VC++2012 Ultimate。我不是疯狂的专业术语和先进的概念,所以请

我一直收到以下两个错误,我不知道为什么

error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup MSVCRTD.lib(crtexe.obj)

error LNK1120: 1 unresolved externals
确保我将其作为控制台运行[即使在链接器属性中,它也显示为控制台] 我正在使用VC++2012 Ultimate。我不是疯狂的专业术语和先进的概念,所以请尽量不要压倒我Dx

//Main.cpp
#include <conio.h>
#include "XArray.h"


int Main() {
    XArray<int> Test;
    Test.Add(3);
    getch();
    return 1;
}
//Main.cpp
#包括
#包括“XArray.h”
int Main(){
沙雷试验;
测试。添加(3);
getch();
返回1;
}
接着是

#ifndef XARRAY_H
#define XARRAY_H

template <class X>
class XIndex {
public:
    X Value;
    XIndex<X> *Next;

    //Construct
    XIndex(X ArrayValue) { Value = ArrayValue; Next = nullptr; }

};

template <class X>
class XArray {
    XIndex<X> *First;
public:
    //Construct/Destruct;
    XArray() { First = nullptr; }
    ~XArray();

    //Operators that Alter the structure;
    void Add(X); //Add X to the end.
    void AddX(X, int); //Create Int amount of X values
    void Insert(int, X); //Insert X at Index int
    bool Remove(int); //Remove Index int. Return true if deleted, false if failed.
    //void Sort(); //Todo -- Sorts by value.
    //Operators that deal with the values.
    X Get(int);
    void Set(int, X);


};

template <class X>
void XArray<X>::AddX(X NewVal, int Quantity) {
    for (int i = 0; i < Quantity; i++)
        Add(NewVal);
}

template <class X>
void XArray<X>::Add(X NewVal) {
    XIndex<X> *CurrentIndex;
    XIndex<X> *NewNode; //Where we store NewVal
    NewNode = new XIndex<X>(NewVal);

    //List doesn't exist.
    if (!First) { 
        First = NewNode;
    } else {
        //Start at beginning.
        CurrentIndex = First;
        while ((*CurrentIndex).Next){ 
            CurrentIndex = (*CurrentIndex).Next;
        }
        (*CurrentIndex).Next = NewNode;
    }

}

template <class X>
void XArray<X>::Insert(int Index, X NewVal) {
    XIndex<X> *CurrentIndex;
    XIndex<X> *PrevIndex;
    XIndex<X> *NewNode; //Where we store NewVal
    iCounter = 0;
    NewNode = new XIndex<X>(NewVal);

    //List doesn't exist.
    if (!First) { 
        First = NewNode;
    } else {
        //Start at beginning.
        CurrentIndex = First;

        while ((*CurrentIndex).Next != nullptr && iCounter < Index){ 
            iCounter += 1
            PrevIndex = CurrentIndex;
            CurrentIndex = (*CurrentIndex).Next;
        }
        if (PreviousNode == nullptr) {
            First = NewNode;
            (*NewNode).Next = CurrentIndex;
        } else {
            (*PrevIndex).Next = NewNode;
            (*NewNode).Next = CurrentIndex;
        }
    }

}

template <class X>
bool XArray<X>::Remove(int Index) {
    XIndex<X> *CurrentIndex;
    XIndex<X> *PrevIndex;
    int iCounter = 0;
    if (First == nullptr) return false; //We never had a list.

    //It's the first one;
    if (Index == 0) {
        CurrentIndex = (*First).Next;
        delete First;
        First = CurrentIndex;
        return true;
    }

    //Starting as normal.
    CurrentIndex = First;

    //Loop until we reach the index.
    while (CurrentIndex != nullptr && iCounter < Index) {
        iCounter += 1
        PrevIndex = CurrentIndex;
        CurrentIndex = (*CurrentIndex).Next;
    }
    if (CurrentIndex != nullptr) {
        (*PrevIndex).Next = (*CurrentIndex).Next;
        delete CurrentIndex;
        return true;
    }
    return false;

}

//Destructor;
template <class X>
XArray<X>::~XArray() {
    XIndex<X> *NextIndex;
    XIndex<X> *CurrentIndex;

    //Start at beginning.
    CurrentIndex = First;

    //So long as we aren't at the end [when Next = nullptr];
    while (CurrentIndex != nullptr) {
        NextIndex = (*CurrentIndex).Next;
        delete CurrentIndex;
        CurrentIndex = NextIndex;
    }
}
#endif
\ifndef XARRAY\H
#定义XARRAY_H
模板
类XIndex{
公众:
X值;
XIndex*Next;
//构造
XIndex(X ArrayValue){Value=ArrayValue;Next=nullptr;}
};
模板
XArray类{
XIndex*第一;
公众:
//构造/破坏;
XArray(){First=nullptr;}
~XArray();
//改变结构的经营者;
void Add(X);//将X添加到末尾。
void AddX(X,int);//创建X值的int数量
void Insert(int,X);//在索引int处插入X
bool Remove(int);//删除索引int。如果删除,则返回true;如果失败,则返回false。
//void Sort();//Todo--按值排序。
//处理值的运算符。
X Get(int);
空集(int,X);
};
模板
void XArray::AddX(X NewVal,int数量){
对于(int i=0;i在C++中,main函数被声明为“代码> int main())/>代码>或<代码> int main(int ARC,char *ARGV[])< /C> >(参见C++标准,第3.6-1段的主要功能)。

在您的情况下,链接器找不到
main
,因此会抛出一个错误。

项目->属性->配置属性->链接器->系统


以及将子系统更改为控制台。

我不能完全确定,但通常这些错误主要取决于创建项目时选择的项目类型。如果选择Console,通常需要遵循以下步骤

int _tmain(int argc, _TCHAR* argv[])
但如果您选择了Windows类型的项目,则可以按照

int WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd)
但是,如果您正在现有项目中将tmain修改为WinMain,或者将WinMain修改为WinMain,那么您可能需要执行Arivazhagan一直建议的操作

如果需要
WinMain(HINSTANCE-hInst、HINSTANCE-hPrevInst、LPSTR-lpCmdLine、int-nShowCmd),可以将属性->配置属性->链接器->系统中的设置更改为Windows


控制台,如果您需要
\u tmain(int argc,\u TCHAR*argv[])
格式。

感谢您的帮助。有时候,你只需要别人指出…可能重复的垃圾