函数___tmainCRTStartup中引用了未解析的外部符号_main

时间:2012-05-17 11:38:54

标签: c++ templates visual-c++ namespaces

我一直收到此错误:当我尝试编译我的c ++控制台应用程序时,'函数_ _tmainCRTStartup'中未解析的外部符号主要引用。我做了一些搜索,我发现只是将我的'链接器'从窗口改为控制台,反之亦然。这没用,我甚至尝试创建一个新的控制台应用程序。

我不确定是什么导致这种情况,template <typename T>是否可能导致两个文件中出现混淆?这里的任何帮助将不胜感激。

以下代码:

Main.cpp的:

#include <iostream>
#include "tools.h"
using namespace tools;

template <typename T>
int main()
{
T input1;
T input2;

std::cout << "Enter in 1st number: " << endl;
std::cin >> input1;
std::cout << "Enter in 2nd number: " << endl;
std::cin >> input2;
std::cout << "num1 - num2 = [" << numberDifference(input1, input2) << "]" << endl;
getchar();
getchar();

return 0;
}

的Tools.h:

#include <iostream>
namespace tools
{
template <typename T>
T numberDifference(T num1, T num2)
{
    if(num1 > num2)
        return num1 - num2;
    else
        return num2 - num1;
}
};

2 个答案:

答案 0 :(得分:5)

删除template功能的main定义。

或者至少从正确的main函数中调用它。

e.g。

template< typename T >
int templated_main( int c, char** argv )
{
    // What was in your original main function....

}

int main( int c, char** argv )
{
    return templated_main<int>( c, argv );
}

答案 1 :(得分:2)

在main之前删除template <typename T>。这将使main成为模板函数。

并将T input1; T input2;更改为某种特定类型,例如intfloat