ошибка LNK2019: неразрешенный основной символ внешнего символа, указанный в функции __tmainCRTStartup MSVCRTD.lib (crtexe.obj)

Я продолжаю получать следующие две ошибки, и я не могу понять, почему.

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;
}

С последующим.

#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

1

Решение

В C ++ основная функция объявлена ​​как int main() или же int main(int argc, char *argv[]) (см. Стандарт C ++, параграф 3.6.1 Основная функция).

В вашем случае компоновщик не может найти тело main, так что выдает ошибку.

3

Другие решения

Проект -> Свойства -> Свойства конфигурации -> Компоновщик -> Система

и изменение подсистемы на консоль.

2

Я не совсем уверен, но, как правило, ошибки такого рода в основном зависят от типа проекта, который вы выбираете при создании проекта. Если вы выбираете Консоль, вы, как правило, должны следовать

int _tmain(int argc, _TCHAR* argv[])

но если вы выбрали тип проекта Windows, то вы можете следовать

int WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd)

Но если вы изменяете _tmain на WinMain или наоборот в уже существующем проекте, возможно, вы захотите сделать то, что предлагает Ариважаган.

Вы можете изменить настройки в Свойствах -> Свойства конфигурации -> Линкер -> Система для Windows, если хотите WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd) формат

а также

Консоль, если хотите _tmain(int argc, _TCHAR* argv[]) формат.

1
По вопросам рекламы [email protected]