未定义的'WinMain @ 16'参考

时间:2013-04-24 11:12:18

标签: c++ header linker declaration

我得到一个[链接器错误]未定义的引用'WinMain @ 16',我无法解决问题。我正在使用Dev-C ++ - 在我的项目设置中选择“Win32 Console”,因为我希望它成为控制台应用程序。

示例标题(Test.h):

#ifndef TEST_H
#define TEST_H
#include<string>
using namespace std;
class Test {
  private:
    int testing;
  public:
    int main();
};
#endif

示例.cpp文件

#include<iostream>
#include "Test.h"
using namespace std;
int Test::main(){ 
   /*         EXAMPLE       */
   cout << "Enter Test" <<endl;
   cin >> testing;
   cout << "----------------------------"<<endl;
   system("pause");
   return 0;   
}

我可以通过删除main()前面的Test::来修复错误,但我希望它引用我的头文件。如果它没有引用我的头文件,那么我的所有变量都会变成未声明的...除非我将它们放入程序本身。

请注意,代码只是我正在做的事情的一个例子..如果它是愚蠢的显而易见再次对不起。 : - (

2 个答案:

答案 0 :(得分:2)

答案在评论中提供,但这里是gist ::

#ifndef TEST_H
#define TEST_H
#include<string>
using namespace std;
class Test {
  private:
    int testing;
  public:
    int main();
};

int Test::main(){ 
   /*         EXAMPLE       */
   cout << "Enter Test" <<endl;
   cin >> testing;
   cout << "----------------------------"<<endl;
   system("pause");
   return 0;   
}
#endif

在.cpp文件中::

#include<iostream>
#include "Test.h"
using namespace std;
int main(){ 
   /*         EXAMPLE       */
   Test *testObject = new Test();
   testObject->main();
   delete(testObject);
   system("pause");
   return 0;   
}

答案 1 :(得分:0)

哦,当你有更好的方法时,你为什么要使用system("PAUSE")! (你可以在这里阅读为什么system()是邪恶的:http://www.cplusplus.com/forum/articles/11153/) 为什么不这样做:

void PressEnterToContinue()
{
    std::cout << "Press ENTER to continue...\n";
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

然后在最后调用函数??