Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 LNK2005-Visual Studio-以前编译过,没有更改,现在不编译 我正在用VisualC++编写一个数据结构学校的项目。今天早些时候,我把代码编译得很好,然后把它带回家,它就不再工作了。我一直在使用的两台机器都使用VisualStudio2008。下面是错误的文本_Visual Studio 2008 - Fatal编程技术网

Visual studio 2008 LNK2005-Visual Studio-以前编译过,没有更改,现在不编译 我正在用VisualC++编写一个数据结构学校的项目。今天早些时候,我把代码编译得很好,然后把它带回家,它就不再工作了。我一直在使用的两台机器都使用VisualStudio2008。下面是错误的文本

Visual studio 2008 LNK2005-Visual Studio-以前编译过,没有更改,现在不编译 我正在用VisualC++编写一个数据结构学校的项目。今天早些时候,我把代码编译得很好,然后把它带回家,它就不再工作了。我一直在使用的两台机器都使用VisualStudio2008。下面是错误的文本,visual-studio-2008,Visual Studio 2008,我不确定这是否与此有关,但我的程序有3个主要类:AVL,它继承自BST,它继承自SearchableADT。这些是模板类 BST.obj:错误LNK2005:“public:u thiscall BST,class std::allocator>>::BST,class std::allocator>>(void)”(?0$BST@V?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@@@QAE@XZ)已在AVL.obj中定义 我完

我不确定这是否与此有关,但我的程序有3个主要类:AVL,它继承自BST,它继承自SearchableADT。这些是模板类

BST.obj:错误LNK2005:“public:u thiscall BST,class std::allocator>>::BST,class std::allocator>>(void)”(?0$BST@V?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@@@QAE@XZ)已在AVL.obj中定义

我完全不知道该怎么办。我浏览了一些论坛,查看了MSDN页面,但没有任何东西能够修复它

我注意到在一个我忘记的网站上提到的一件事是为我的AVL定义了#ifndef/#。我创建了一个新的项目,复制并粘贴了我所有的代码,但是我仍然会遇到同样的错误。我已经检查了我的代码,以验证我没有执行多个包含库的操作。不过,我不知道从这里该怎么办

感谢您提供的任何帮助,如果我遗漏了一些重要的内容,请提前道歉

编辑:我不确定你所说的“内联”是什么意思,现在试着做一些查看。我有一个单独的cpp,在这里我定义了实际的函数。格雷格答案中的内联部分是否仍然适用

MSN,恐怕我不明白你的答案。至于默认构造函数的多个副本,我有

BST<int>::BST()
{
    root = new Node<int>;
}

BST<string>::BST()
{
root = new Node<string>;
}
BST::BST()
{
根=新节点;
}
BST::BST()
{
根=新节点;
}
我不确定这是否就是你所说的,或者这是否就是问题所在。我的头文件只有BST();,int或string模板没有任何内容。我在我的cpp中有这些定义,因为我的导师说它们对于模板化的类是必要的


非常感谢您

内联声明BST::BST(void),并确保您没有违反一个定义规则,并且根据其他一些预处理器的乐趣使用不同的BST::BST(void)实现。

听起来您可能以非内联方式在头文件中定义了一个方法。例如,在头文件中包含以下内容可能会导致此类问题:

template <class T> class Foo {
    void bar();
};

template <class T> void Foo<T>::bar()
{
    // ...
}
模板类Foo{
空心钢筋();
};
模板void Foo::bar()
{
// ...
}
在头文件中使用该函数,然后将其包含到两个不同的模块中,将为相同的
Foo::bar()
函数提供两个不同的定义,以及由此产生的错误。一种解决方案是内联声明函数:

template <class T> class Foo {
    void bar() {
        // ...
    }
}
模板类Foo{
空条(){
// ...
}
}

您没有为模板的每个实例化类型定义单独的构造函数。对于BST,您只需要一个构造函数。您可以使用模板参数创建节点类的实例:

root = new Node<T>();
root=新节点();