Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;此指针没有';t执行构造函数 #包括 使用名称空间std; 甲级{ 公众: int-val; (){ val=0; } A(整数n){ val=n; } A GetObj(){ 归还*这个; } }; main(){ A A; cout_C++ - Fatal编程技术网

C++ c++;此指针没有';t执行构造函数 #包括 使用名称空间std; 甲级{ 公众: int-val; (){ val=0; } A(整数n){ val=n; } A GetObj(){ 归还*这个; } }; main(){ A A; cout

C++ c++;此指针没有';t执行构造函数 #包括 使用名称空间std; 甲级{ 公众: int-val; (){ val=0; } A(整数n){ val=n; } A GetObj(){ 归还*这个; } }; main(){ A A; cout,c++,C++,现在,GetObj()通过值返回A,因此它有效地返回了*此的副本。返回的对象不是A-它是一个全新的实体,由A创建。要使其工作,您需要通过引用返回它: #include <iostream> using namespace std; class A { public: int val; A(){ val=0; } A( int n){ val=n; } A GetObj(){ return

现在,
GetObj()
通过值返回
A
,因此它有效地返回了
*此
的副本。返回的对象不是
A
-它是一个全新的实体,由
A
创建。要使其工作,您需要通过引用返回它:

#include <iostream>
using namespace std;
class A {
public:
    int val;
    A(){
        val=0;
    }
    A( int n){
        val=n;
    }
    A GetObj(){
        return *this;
    }
};
main()  {
    A a;
    cout << a.val << endl;
    a.GetObj() = 5;
    cout << a.val << endl;
}
不过,最好的解决方案是(IMHO)为
val
添加一个setter:

A& GetObj(){
    return *this;
}
然后:

class A {
public:
    //other things..

    void SetValue(int value) {
        this->val = value;
    }
};
现在,
GetObj()
通过值返回
A
,因此它实际上返回了
*此
的一个副本。返回的对象不是
A
-它是一个全新的实体,由
A
创建。要使其工作,您需要通过引用返回它:

#include <iostream>
using namespace std;
class A {
public:
    int val;
    A(){
        val=0;
    }
    A( int n){
        val=n;
    }
    A GetObj(){
        return *this;
    }
};
main()  {
    A a;
    cout << a.val << endl;
    a.GetObj() = 5;
    cout << a.val << endl;
}
不过,最好的解决方案是(IMHO)为
val
添加一个setter:

A& GetObj(){
    return *this;
}
然后:

class A {
public:
    //other things..

    void SetValue(int value) {
        this->val = value;
    }
};
现在,
GetObj()
通过值返回
A
,因此它实际上返回了
*此
的一个副本。返回的对象不是
A
-它是一个全新的实体,由
A
创建。要使其工作,您需要通过引用返回它:

#include <iostream>
using namespace std;
class A {
public:
    int val;
    A(){
        val=0;
    }
    A( int n){
        val=n;
    }
    A GetObj(){
        return *this;
    }
};
main()  {
    A a;
    cout << a.val << endl;
    a.GetObj() = 5;
    cout << a.val << endl;
}
不过,最好的解决方案是(IMHO)为
val
添加一个setter:

A& GetObj(){
    return *this;
}
然后:

class A {
public:
    //other things..

    void SetValue(int value) {
        this->val = value;
    }
};
现在,
GetObj()
通过值返回
A
,因此它实际上返回了
*此
的一个副本。返回的对象不是
A
-它是一个全新的实体,由
A
创建。要使其工作,您需要通过引用返回它:

#include <iostream>
using namespace std;
class A {
public:
    int val;
    A(){
        val=0;
    }
    A( int n){
        val=n;
    }
    A GetObj(){
        return *this;
    }
};
main()  {
    A a;
    cout << a.val << endl;
    a.GetObj() = 5;
    cout << a.val << endl;
}
不过,最好的解决方案是(IMHO)为
val
添加一个setter:

A& GetObj(){
    return *this;
}
然后:

class A {
public:
    //other things..

    void SetValue(int value) {
        this->val = value;
    }
};

它遵循一种最接近您试图实现的替代方法(
getObj
,后跟
=
符号)

#包括
使用名称空间std;
甲级{
公众:
int-val;
(){
val=0;
}
A(整数n){
val=n;
}
A运算符=(int v)(&v){
val=v;
归还*这个;
}
};
main(){
A A;

cout它遵循一种最接近您试图实现的目标的替代方法(
getObj
后跟
=
符号)

#包括
使用名称空间std;
甲级{
公众:
int-val;
(){
val=0;
}
A(整数n){
val=n;
}
A运算符=(int v)(&v){
val=v;
归还*这个;
}
};
main(){
A A;

cout它遵循一种最接近您试图实现的目标的替代方法(
getObj
后跟
=
符号)

#包括
使用名称空间std;
甲级{
公众:
int-val;
(){
val=0;
}
A(整数n){
val=n;
}
A运算符=(int v)(&v){
val=v;
归还*这个;
}
};
main(){
A A;

cout它遵循一种最接近您试图实现的目标的替代方法(
getObj
后跟
=
符号)

#包括
使用名称空间std;
甲级{
公众:
int-val;
(){
val=0;
}
A(整数n){
val=n;
}
A运算符=(int v)(&v){
val=v;
归还*这个;
}
};
main(){
A A;

无法确定它是否应该编译。但是
a.GetObj()
返回一个在表达式末尾被销毁的临时值。您需要了解调用
a.GetObj()时
a::GetObj()
实际返回的是什么
之前,您将完全理解为什么它不能按原样工作。提示:它不是
a
。不确定它是否应该编译。但是
a.GetObj()
返回一个在表达式末尾被销毁的临时值。您需要理解调用
a.GetObj()时
a::GetObj()
实际返回的是什么
之前,您将完全理解为什么它不能按原样工作。提示:它不是
a
。不确定它是否应该编译。但是
a.GetObj()
返回一个在表达式末尾被销毁的临时值。您需要理解调用
a.GetObj()时
a::GetObj()
实际返回的是什么
之前,您将完全理解为什么它不能按原样工作。提示:它不是
a
。不确定它是否应该编译。但是
a.GetObj()
返回一个在表达式末尾被销毁的临时值。您需要理解调用
a.GetObj()时
a::GetObj()
实际返回的是什么
在您完全理解为什么它不能按原样工作之前。提示:它不是
a
。从技术上讲,他不需要定义赋值运算符,因为编译器将使用
a(int)
构造函数转换整数,然后调用将匹配将执行赋值的隐式复制赋值运算符。@0x499602D2啊,是的,没有注意到这一点。答案稍微缩短了一点,谢谢。从技术上讲,他不需要定义赋值运算符,因为编译器将使用
a(int)
构造函数转换整数,然后调用将匹配将执行赋值的隐式复制赋值运算符。@0x499602D2啊,是的,没有注意到这一点。答案稍微缩短了一点,谢谢。从技术上讲,他不需要定义赋值运算符,因为编译器将使用
a(int)
构造函数转换整数,然后调用将匹配将执行赋值的隐式复制赋值运算符。@0x499602D2啊,是的,没有注意到这一点。答案稍微缩短了一点,谢谢。从技术上讲,他不需要定义赋值运算符,因为编译器将使用
a(int)
构造函数转换整数,然后调用将匹配将执行赋值的隐式复制赋值运算符。@0x499602D2啊,是的,没有注意到。答案缩短了一点,tha