C++ 的问题???

lewis_c402 2005-04-26 09:32:11
下面的程序那边错了 帮我看看:
#include <iostream>
#include <string>

using namespace std;

template <class T>
class NamedObject {
public:
// NamedObject( const char *name, const T& value );
NamedObject( string& name, const T& value );
private:
string& nameValue;
T objectValue;
};

template <class T> NamedObject<T>::NamedObject ( string& name, const T& value )
{
nameValue = name;
objectValue = value;
}

int main()
{
class empty{ };
string first( "first" );
string second( "second" );

NamedObject<int> p( first, 2 );
NamedObject<int> s( second, 3 );

// p = s;
system("pause");
}

编译的错误为:

// uninitialized reference member ` NamedObject<int>::nameValue'
...全文
149 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhfu 2005-04-26
  • 打赏
  • 举报
回复
调用 p = s; 语句
你就对string& nameValue;赋值,,而对引用赋值是不允许的,,
所以前面说你 这句 string& nameValue; 有问题
zhangsong1238 2005-04-26
  • 打赏
  • 举报
回复
楼主也太不小心了
lewis_c402 2005-04-26
  • 打赏
  • 举报
回复
以前的问题我知道了
再问一下 如果
调用 p = s; 语句 会怎样
编译好象通不过
qhfu 2005-04-26
  • 打赏
  • 举报
回复
string& nameValue;//这里用一个引用好像不大好吧! 首先引用定义时必须初始化,指向一个对象,而且引用已经指定就不能再指向其它对象了
husl 2005-04-26
  • 打赏
  • 举报
回复
string& nameValue;
这里声明的是引用类型 ,引用在声明的时候就要被初始化的

引用肯定要有引用的对象啊
llmsn 2005-04-26
  • 打赏
  • 举报
回复
是的定义引用的时候要指定初值.
llf_hust 2005-04-26
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>

using namespace std;

template <class T>
class NamedObject {
public:
// NamedObject( const char *name, const T& value );
NamedObject( string& name, const T& value ):nameValue(name) //引用必须在初始化列表中初始化
{
objectValue = value;
}
private:
string& nameValue;
T objectValue;
};
/*
template <class T> NamedObject<T>::NamedObject ( string& name, const T& value )
{
nameValue = name;
objectValue = value;
}
*/

int main()
{
class empty{ };
string first( "first" );
string second( "second" );

NamedObject<int> p( first, 2 );
NamedObject<int> s( second, 3 );

// p = s;
system("pause");
}

sunman1982 2005-04-26
  • 打赏
  • 举报
回复
恩,对的 要初始化
llf_hust 2005-04-26
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>

using namespace std;

template <class T>
class NamedObject {
public:
// NamedObject( const char *name, const T& value );
NamedObject( string& name, const T& value ):nameValue(name) //引用必须在初始化列表中初始化
{
objectValue = value;
}
private:
string& nameValue;
T objectValue;
};

template <class T> NamedObject<T>::NamedObject ( string& name, const T& value )
{
nameValue = name;
objectValue = value;
}

int main()
{
class empty{ };
string first( "first" );
string second( "second" );

NamedObject<int> p( first, 2 );
NamedObject<int> s( second, 3 );

// p = s;
system("pause");
}
lewis_c402 2005-04-26
  • 打赏
  • 举报
回复
应该在那边初始化 是不是用初始化表
和在构造函数中初始化有何不同啊
lbing7 2005-04-26
  • 打赏
  • 举报
回复
string& nameValue;

引用必须初始化

64,670

社区成员

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

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