将程序与模板化 main 链接失败

Linking failure of a program with templated main

提问人:JC Denton 提问时间:9/24/2017 最后编辑:valianoJC Denton 更新时间:10/9/2017 访问量:58

问:

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;
}
C++ 链接器 错误 LNK2019

评论


答:

1赞 tadman 9/24/2017 #1

不能模板化 .它需要是一个非常无聊、非常普通的功能。main

目前尚不清楚为什么模板部分甚至在那里。我认为错误是有那行,它应该被删除,因为并且应该在您正确包含的各自头文件中定义。StatePuzzle

请记住,除非使用函数,否则函数实际上不会生成任何已编译的代码,然后编译器将生成与所涉及的类型相关的代码。由于此模板已声明且从未使用过,因此基本上被忽略。template

评论

0赞 JC Denton 9/25/2017
你是对的。我删除了它,它起作用了。谢谢!