gpt4 book ai didi

c++ - 简单继承相关代码中的段错误

转载 作者:行者123 更新时间:2023-12-02 09:52:32 25 4
gpt4 key购买 nike

我为学习目的编写的缩短代码。仍然是这样,它不能正常工作。
删除最后一行 (&&) 可以正常工作,但是使用它,代码不会到达标记为 ## 的行,表示
段错误,在显示“BazOnly”文本之后。

#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

namespace nek{
class Baz{
int num;
std::string str;
public:
Baz(){cout<<"BazOnly"<<endl;}
string setstr(string& val){
//str.assign(val);
num= 7;
}
};
}

namespace drg{
class Deriv: nek::Baz{
public:
Deriv(char ch){cout<<"DerivChar"<<endl;}
};
};

int main(){
nek::Baz b;
string priv{"zik"};
b.setstr(priv);
cout<<"Passed here"<<endl; //##
drg::Deriv dc{'A'}; // &&
}
在 Virtual Box 上使用 g++(选项 std=gnu++11)、Ubuntu 16 编译。
问题是这种行为的原因是什么?

最佳答案

    string setstr(string& val){  
//str.assign(val);
num= 7;
}
该方法被声明为返回 std::string ,但实际上没有返回任何内容。这是未定义的行为。
大多数现代 C++ 编译器都会对此发出警告。如果你这样做了,这就是为什么你不能忽略来自编译器的警告消息的一个例子,即使它确实成功地编译了你的代码。

关于c++ - 简单继承相关代码中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63329118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com