我创建了一个单例类
class AreaDataRepository {
private:
AreaDataRepository();
AreaDataRepository(const AreaDataRepository& orig);
virtual ~AreaDataRepository();
Way onGoingWay;
public:
static AreaDataRepository& Instance()
{
static AreaDataRepository singleton;
return singleton;
}
void SetOnGoingWay(Way onGoingWay);
Way const & GetOnGoingWay() const;
};
void AreaDataRepository::SetOnGoingWay(Way onGoingWay) {
this->onGoingWay = onGoingWay;
}
Way const & AreaDataRepository::GetOnGoingWay() const {
return onGoingWay;
}
Way的头文件
class Way {
private:
std::string id;
std::string name;
public:
Way();
Way(const Way& orig);
virtual ~Way();
void SetName(std::string name);
std::string const & GetName() const;
void SetId(std::string id);
std::string const & GetId() const;
};
然后我创建了一个Way对象并设置了id和name的值。
Way wayNode;
wayNode.SetId("123");
wayNode.SetName("jan")
AreaDataRepository::Instance().SetOnGoingWay(wayNode);
指定OngoingWay从另一个类访问它。
std::cout << AreaDataRepository::Instance().GetOnGoingWay().GetId();
这个谷没有打印。
答案 0 :(得分:3)
我在这里开心灵....我认为你SetId
的实现是这样的:
void SetId(std::string id) { id = id; }
不设置成员变量,将参数设置为自身。由于您的构造函数很可能将成员变量id
设置为""
,因此您将打印空字符串。更改参数的名称(例如,更改为newId
)以避免冲突或将实现更改为:
void SetId(std::string id) { this->id = id; }
作为此声明的证明,这里是第一个版本的the result,正如您所看到的那样,它什么都不打印。第二个是the result,你可以看到它打印的数字。
问题可归结为:您的函数参数名称与成员变量的名称相同,函数参数是阴影/隐藏成员变量。
唯一不能发生的地方是构造函数的初始化列表:
class Foo {
int x;
public:
Foo(int x): x(x) {} // <-- this works
void SetX(int x) { x = x; } // <-- this won't the parameter is hiding the member variable
};
答案 1 :(得分:0)
std::cout
在大多数实现中都是缓冲的,如果不是全部的话。这意味着,在写出任何数据之前,流将等待您结束一行。因此,您可以通过将输出语句更改为
std::cout << AreaDataRepository::Instance().GetOnGoingWay().GetId() << std::endl;