error LNK2019: 无法解析的外部符号
 template<int x, int y, int z>
class Time                                                                                                                                              
{
public:
    Time();  
    void display()
    {
        cout << x << y << z << endl;
    }
};

int main()
{
    Time<11,55,47> time;
    time.display();
    Time<2,17,2017> date;
    date.display();
    system("pause");
    return 0;
}

1>3.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Time::Time(void)" (??0?$Time@$01$0BB@$0HOB@@@QAE@XZ),该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Time::Time(void)" (??0?$Time@$0L@$0DH@$0CP@@@QAE@XZ),该符号在函数 _main 中被引用

3个回答

一般是编译的函数没有定义对,具体你看下

你需要实现拷贝构造函数,而不是只是定义

public:
    Time(){};

编译器编译的流程:
1. 编译预处理:对代码中的宏进行替换,头文件包含操作
2. 编译、优化阶段:通过词法分析、语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码或汇编代码。
3. 汇编过程: 把汇编语言代码翻译成目标机器指令的过程。
4. 链接程序:将有关的目标文件彼此相连接,将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。(分静态链接和动态链接,静态连接是将从其所在地静态链接库中被拷贝到最终的可执行程序中,动态链接是记录器在动态链接库中的信息,运行时直接将其映射到程序空间中)
你这个问题时出现在第4步,编译器在链接是没有找到Time()的定义。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐