LNK2019未解析的外部符号_main在函数&#34中引用; int __cdecl invoke_main(void)" (?invoke_main @@ YAHXZ)
我可以编译我的程序,但无法运行它。它是一个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;
}
答案 0 :(得分:1)
您无法模板main
。它需要是一个非常无聊,非常普通的功能。
目前还不清楚为什么模板部分就在那里。我认为错误就是要删除该行,因为State
和Puzzle
应该在您正确包含的各自的头文件中定义。
记住template
函数实际上不会生成任何已编译的代码,除非它们被使用,然后编译器将生成与所涉及的类型相关的代码。由于此模板已声明且从未使用过,因此它基本上被忽略了。