我知道这个问题不是很具有描述性,但我无法更好地表达它。
我正在尝试编译一个具有多个对象的静态链接库,所有对象都包含以下内容:
#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 的 Data,我将在每个 .obj 的链接时收到 LNK4006 警告,说明 .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) {}
不过,我想要完成的不是编译它,而是作为用户可以使用的标题。