类模板定义编译出错,请高手帮忙!

coolmurder 2009-03-12 12:27:53
main函数里实例SettingValue<int> sv;时提示
undefined reference to `Envpro::ServerConfig::SettingValue<int>::SettingValue()'

调用sv.setValue(98);时提示
undefined reference to `Envpro::ServerConfig::SettingValue<int>::setValue(int)'

各位帮看下什么原因。
代码如下:

/***SettingValue.h***/
#ifndef SETTINGVALUE_H_
#define SETTINGVALUE_H_

namespace Envpro{ namespace ServerConfig{

template <class T> class SettingValue
{
public:
T getValue();
void setValue(T val);
bool isChanged();

SettingValue();
SettingValue(T val);
virtual ~SettingValue();

private:
T m_value;
bool m_bChanged;
};

}}

#endif /*SETTINGVALUE_H_*/

/***SettingValue.cpp***/
#include "SettingValue.h"

using Envpro::ServerConfig::SettingValue;

template <class T> SettingValue<T>::SettingValue()
: m_bChanged(false)
{
}

template <class T> SettingValue<T>::SettingValue(T val)
: m_bChanged(false), m_value(val)
{

}

template <class T> SettingValue<T>::~SettingValue()
{
}

template <class T> T SettingValue<T>::getValue()
{
return m_value;
}

template <class T> void SettingValue<T>::setValue(T val)
{
m_value = val;
m_bChanged = true;
}

template <class T> bool SettingValue<T>::isChanged()
{
return m_bChanged;
}

/***mainapp.cpp***/
#include "Setting.h"

#include <stdio.h>

using Envpro::ServerConfig::SettingValue;

int main()
{
SettingValue<int> sv;
sv.setValue(98);
printf("SettingValue:%d", sv.getValue());

return 0;
}
...全文
171 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chin_chen 2009-03-12
  • 打赏
  • 举报
回复
把main前面的那个
#include "Setting.h" 
改为
#include "SettingValue.h"

你这个错误是由于头文件的问题
coolmurder 2009-03-12
  • 打赏
  • 举报
回复
多谢各位 马上结帖
pengzhixi 2009-03-12
  • 打赏
  • 举报
回复
将SettingValue.cpp这个文件里面的内容放到SettingValue.h里面
  • 打赏
  • 举报
回复
模板的声明跟定义最好都放头文件里,不然会出错的。
coolmurder 2009-03-12
  • 打赏
  • 举报
回复
我重新排下版 贴下代码

/***SettingValue.h***/
#ifndef SETTINGVALUE_H_
#define SETTINGVALUE_H_

namespace Envpro{ namespace ServerConfig{

template <class T> class SettingValue
{
public:
T getValue();
void setValue(T val);
bool isChanged();

SettingValue();
SettingValue(T val);
virtual ~SettingValue();

private:
T m_value;
bool m_bChanged;
};

}}

#endif /*SETTINGVALUE_H_*/

/***SettingValue.cpp***/
#include "SettingValue.h"

using Envpro::ServerConfig::SettingValue;

template <class T> SettingValue <T>::SettingValue()
: m_bChanged(false)
{
}

template <class T> SettingValue <T>::SettingValue(T val)
: m_bChanged(false), m_value(val)
{

}

template <class T> SettingValue <T>::~SettingValue()
{
}

template <class T> T SettingValue <T>::getValue()
{
return m_value;
}

template <class T> void SettingValue <T>::setValue(T val)
{
m_value = val;
m_bChanged = true;
}

template <class T> bool SettingValue <T>::isChanged()
{
return m_bChanged;
}

/***mainapp.cpp***/
#include "SettingValue.h"

#include <stdio.h>

using Envpro::ServerConfig::SettingValue;

int main()
{
SettingValue <int> sv;
sv.setValue(98);
printf("SettingValue:%d", sv.getValue());

return 0;
}

coolmurder 2009-03-12
  • 打赏
  • 举报
回复
我重新排下版 贴下代码

/***SettingValue.h***/
#ifndef SETTINGVALUE_H_
#define SETTINGVALUE_H_

namespace Envpro{ namespace ServerConfig{

template <class T> class SettingValue
{
public:
T getValue();
void setValue(T val);
bool isChanged();

SettingValue();
SettingValue(T val);
virtual ~SettingValue();

private:
T m_value;
bool m_bChanged;
};

}}

#endif /*SETTINGVALUE_H_*/

/***SettingValue.cpp***/
#include "SettingValue.h"

using Envpro::ServerConfig::SettingValue;

template <class T> SettingValue <T>::SettingValue()
: m_bChanged(false)
{
}

template <class T> SettingValue <T>::SettingValue(T val)
: m_bChanged(false), m_value(val)
{

}

template <class T> SettingValue <T>::~SettingValue()
{
}

template <class T> T SettingValue <T>::getValue()
{
return m_value;
}

template <class T> void SettingValue <T>::setValue(T val)
{
m_value = val;
m_bChanged = true;
}

template <class T> bool SettingValue <T>::isChanged()
{
return m_bChanged;
}

/***mainapp.cpp***/
#include "SettingValue.h"

#include <stdio.h>

using Envpro::ServerConfig::SettingValue;

int main()
{
SettingValue <int> sv;
sv.setValue(98);
printf("SettingValue:%d", sv.getValue());

return 0;
}

coolmurder 2009-03-12
  • 打赏
  • 举报
回复
谢谢chin_chen 帖子里是我写错了
/***mainapp.cpp***/
#include "Setting.h"
这里
的确是#include "SettingValue.h"
问题不在这 麻烦看看是其他什么问题

顺便问一下 csdn里怎么重新编辑我的问题
内容帖错了怎么改,不会重新开帖把!
还有怎么贴代码部分?

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧