我知道这个问题不是非常具有描述性,但我不能更好地描述它。如何在不使用模板时摆脱警告LNK4006?
我试图编译有几个对象的静态链接库,所有的对象包含以下内容:
#include foo.h
了foo.h是沿着这些路线的东西:
#pragma once
template<class T>
class DataT{
private:
T m_v;
public:
DataT(T v) : m_v(v){}
};
typedef DataT<double> Data;
现在,一切工作正常,但如果我改变DataT只是双数据而不是T,我会得到一个LNK4006警告链接时间为每个.obj声明.ctor已被定义。
编辑1:
#pragma once
class Data{
private:
double m_v;
public:
Data(double v) : m_v(v){}
};
编辑2: 我使用MSVC7。 的.ctor实际上是包含在这两种情况下,如
...
public:
Data(double v);
#include foo.inl
...
//foo.inl
Data::Data(double v): m_v(v) {}
什么我想虽然完成,是不是有编制,但作为一个头中的用户可以使用。
你可以显示更改后的代码的样子吗? – gatorfax 2009-08-06 18:46:25
你使用了什么确切的编译器?代码是否真的像你发布的那样? (特别是,在类体中定义的构造函数?还是定义了类定义的外部?这是特别重要的)。正如Mike所评论的那样:如果您在某些特定代码方面存在问题,请向您提供问题的代码,而不是其他一些编译完好的代码。我的猜测是你在.h里面定义了构造函数,但是在类之外。 – 2009-08-06 19:15:39
现在你可以展示如何使用头和数据类了吗?显示的标题工作正常。所有的.cpp文件都被重新编译了吗? – 2009-08-06 19:16:47