提问人:JC Denton 提问时间:9/24/2017 最后编辑:valianoJC Denton 更新时间:10/9/2017 访问量:58
将程序与模板化 main 链接失败
Linking failure of a program with templated main
问:
LNK2019函数“int __cdecl invoke_main(void)”(?invoke_main@@YAHXZ) 中引用_main未解析的外部符号
我可以编译我的程序,但不能运行它。它是一个 Windows 控制台应用程序,在 中是这样设置的。Linker -> System -> SubSystem
#include "stdafx.h"
#include <iostream>
#include <queue>
#include "puzzle.h"
#include "state.h"
#include <vector>
using namespace std;
template <typename Puzzle, typename State>
int main()
{
Puzzle puzzle8;
State goalState = new State();
State currentState = new State();
//goal state
goalState.board = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 0 } };
//start state
currentState.board = { { 8, 2, 1 },
{ 5, 6, 0 },
{ 3, 7, 4 } };
puzzle8.visited.push_back(currentState); //add to visited
while (!isGoalState(currentState, goalState))
{
int f, best;
int board1Cost, board2Cost, board3Cost, board4Cost;
vector<State> newStates = expand(currentState);
int bestState = getLowestCost(newStates);
currentState = newStates.at(bestState).board;
cout << "New State found:" << endl;
printState(currentState);
puzzle8.visited.push_back(currentState);
}
return 0;
}
答:
1赞
tadman
9/24/2017
#1
不能模板化 .它需要是一个非常无聊、非常普通的功能。main
目前尚不清楚为什么模板部分甚至在那里。我认为错误是有那行,它应该被删除,因为并且应该在您正确包含的各自头文件中定义。State
Puzzle
请记住,除非使用函数,否则函数实际上不会生成任何已编译的代码,然后编译器将生成与所涉及的类型相关的代码。由于此模板已声明且从未使用过,因此基本上被忽略。template
评论
0赞
JC Denton
9/25/2017
你是对的。我删除了它,它起作用了。谢谢!
评论