gpt4 book ai didi

c++ - 不使用模板时如何摆脱警告 LNK4006?

转载 作者:行者123 更新时间:2023-11-30 03:12:18 24 4
gpt4 key购买 nike

我知道这个问题的描述性不强,但我无法用更好的措辞表达它。

我正在尝试编译一个包含多个对象的静态链接库,所有对象都包含以下内容:

#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 更改为只是带有 double 而不是 T 的数据,我将在每个 .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) {}

虽然我想要完成的不是编译它,而是作为用户可以使用的 header 。

最佳答案

我不确定您在编辑 #2 的示例中要做什么,但我认为如果您在 foo.inl 中包含以下内容可能会有所帮助:

inline
Data::Data(double v): m_v(v) {}

如果 foo.inl 的内容也包含在 inline 关键字不起作用或不应起作用的地方,您可以使用预处理器通过使用扩展为空或 inline 的宏。

关于c++ - 不使用模板时如何摆脱警告 LNK4006?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1240634/

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