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

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;
}
...全文
108 点赞 收藏 7
写回复
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里面
回复 点赞
猫已经找不回了 2009年03月12日
模板的声明跟定义最好都放头文件里,不然会出错的。
回复 点赞
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里怎么重新编辑我的问题
内容帖错了怎么改,不会重新开帖把!
还有怎么贴代码部分?
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告