gpt4 book ai didi

C++ : Class templates, 链接器错误和未解析的符号

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:23 24 4
gpt4 key购买 nike

我在使用模板时遇到了以下问题(我的 IDE 是 Visual Studio 2012):

当我尝试构建我的项目时,我收到“未解析的外部符号”链接器错误。我读到,我应该在头文件中定义所有内容,而不是在头文件和源文件之间分离我的类。但是它仍然无法正常工作。

在下面的例子中,我试图为“字典”创建一个类模板。它应该选择一个类型和另一个类型,并使用两个数组创建一个“单词”到“单词”的翻译,如果你使用它们的公共(public)索引。 (尽管“单词”不是准确的描述,即:input[0] = 'A', output[0] = 2.5 —— 这意味着 'A' 的定义是 2.5)

这是我的代码:

#include <iostream>
using namespace std;
#ifndef WORD_H
#define WORD_H


template <class w, class d>
class Dictionary
{
public:

Dictionary() ;//{}; // constructor (default)
~Dictionary() ;//{}; // destructor

void Define(const w &st,const d &nd)
{
if(index < 100)
{
input[index] = st;
output[index++] = nd;
}
else
{
cerr<<"Not enough space in dictionary.";
}
}// Define words using 2 parameters.st represents input, nd represents output (word -> translation)

void print_words()
{
for(int i = 0; i < index ; i++)
{
cout<<index<<". "<<input[i]<<output[i]<<endl;
}
}

private:
w input[100];
d output[100];
static int index;
};
template <class w, class d>
int Dictionary<w,d>::index = 0;
#endif

“主”文件很简单:

#include "Word.h"
#include <iostream>

void main()
{
Dictionary<int,double> a;
a.Define(5,5.5);
}

这些是错误:

1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Dictionary<int,double>::Dictionary<int,double>(void)" (??0?$Dictionary@HN@@QAE@XZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Dictionary<int,double>::~Dictionary<int,double>(void)" (??1?$Dictionary@HN@@QAE@XZ) referenced in function _main

我应该如何修复我的代码?

最佳答案

 Dictionary() ;//{}; // constructor (default)
~Dictionary() ;//{}; // destructor

声明您的默认构造函数和析构函数,但不要定义它们。也就是说,您告诉编译器您正在编写这些函数,因此它会寻找它们,但实际上您没有编写它们,因此它会感到不安。

您的选择是(基本上都是一样的):

  • 完全删除这些行,并让它们由编译器生成
  • 删除第一个注释斜杠,并使用空定义 (Dictionary(){};//blah)
  • 如果您有最新的编译器(支持 C++11),请使用 default 关键字:Dictionary() = default;

此外,在您的 header 中,文件的所有 内容都应该在守卫中(includeusing)。我强烈建议您不要在头文件中使用 using namespace std;(我宁愿永远不要使用它)。参见 Why is "using namespace std" considered bad practice?

关于C++ : Class templates, 链接器错误和未解析的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20903475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com