指向对象的指针没有任何值(或者没有得到值)
pointer to an object has no any value (or do not get a value)
我有两个类的输出问题,如下所示:
foo.h
public:
Foo(){} ;
Foo(string);
Foo(const Foo&);
string getFooName() const;
~Foo();
private:
string foo;
Foo.cpp
Foo::Foo(string n):foo(n){
}
Foo::Foo(const Foo &f):foo(f.foo){
}
string Foo::getFooName() const{
return foo;
}
Foo::~Foo(){
}
和等级栏:
Bar.h
public:
Bar();
Bar(string, Foo&);
Bar(const Bar&);
Foo& getFoo() const;
~Bar();
private:
string bar;
Foo* foo;
};
Bar.cpp
Bar::Bar(string b, Foo &f):bar(b), foo(new Foo()){
}
Bar::Bar(const Bar &b):bar(b.bar), foo(new Foo(*b.foo)){
}
Foo &Bar::getFoo() const{
return *foo;
}
Bar::~Bar()
{
delete foo;
}
在主要功能中,当我使用这个cout<<"Test:"<<b->getFoo().getFooName();
时,它只会让我输出Test:
而不是Test:TestFoo
。
我的代码出了什么问题?(gcc5.4.0,cmake 3.5.1)tnx
和main.cpp
Foo* f;
Bar* b;
f=new Foo("TestFoo");
b=new Bar("TestBar",*f);
cout<<"Test:"<<b->getFoo().getFooName(); // this line
Bar::Bar(string b, Foo &f):bar(b), foo(new Foo()){}
参数f
未使用。您需要将它传递给Foo
构造函数。
Bar::Bar(string b, Foo &f):bar(b), foo(new Foo(f)){}
问题在于Bar.cpp
:
Bar
的第一个构造函数是
Bar::Bar(string b, Foo &f):bar(b), foo(new Foo()){
}
这告诉编译器创建一个指向新Foo
对象的指针以存储在Bar
对象中。但是,新的Foo
对象与作为输入传递给构造函数的Foo
对象无关。构造函数需要使用传递的Foo
对象作为输入,以便新的Foo
对象在成员变量foo
:中具有相同的值
Bar::Bar(string b, Foo &f):bar(b), foo(new Foo(f.foo)){
}
然后,构造函数调用
b=new Bar("TestBar",*f);
在main.cpp
中,它实际上会为成员变量foo
分配一个值"TestFoo"(而在它没有初始化变量之前)。
因此,b->getFoo().getFooName()
应该根据需要返回"TestFoo"。
当您调用时
b = new Bar("TestBar", *f);
调用以下构造函数:
Bar::Bar(string b, Foo &f):bar(b), foo(new Foo())
正如您所看到的,第二个参数并没有用于初始化foo成员,而是创建了一个新的参数。它与您用"TestFoo"初始化的对象不同!
因此,当您打印时,根本不会返回"TestFoo"。
相关文章:
- std::map 保存任何值类型
- C++ 矢量未显示我插入的任何值
- 为什么我的变量在我尚未将其设置为任何值时返回一个值?
- 如何将任何值转换为对象并使用 boost::p roperty_tree json 添加成员
- 为什么null std ::可选的被认为小于任何值,而不是更多
- 检查数组中的任何值是否等于添加到数组的当前值
- 如何将任何值转换为字节数组并将其附加到字节列表
- stbi_load不返回任何值
- 带有 std::的任何值unordered_map不能any_cast字符串
- 为什么我的程序一直给我堆缓冲区溢出,即使我没有超出数组的界限或覆盖任何值
- 如何使用difference_type按任何值增加/减少reverse_iterator
- c++:何时初始化声明的变量而不将其分配给任何值
- 存储任何值和特定类范围的值
- mpi_scatterv不将任何值返回到recvbuf
- getline 没有为字符串对象分配任何值
- 如何为任何值编码欧拉 #3
- CORBA::String_var -> 我无法为这种类型的类字段分配任何值
- 我的变量不会有任何值
- 如何读取可以是任何值的整数,除非它是 0,它不在文件中
- 指向对象的指针没有任何值(或者没有得到值)