我正在尝试使用std :: string作为函数类型和变量类型来设置基本类,但是使用两者都会给我一个分段错误。如果我删除函数或变量,一切都很好。我确定我犯的是一个非常愚蠢的错误!这是我的代码: main.cpp中
#include <iostream>
#include <cstdlib>
#include <string>
#include "myclass.h"
int main()
{
myclass obj;
obj.replace();
return EXIT_SUCCESS;
};
myclass.h
#ifndef MYCLASS_H_
#define MYCLASS_H_
#include <string>
class myclass
{
private:
std::string instruction;
public:
myclass();
std::string replace();
};
#endif
myclass.cpp
#include "myclass.h"
#include <iostream>
myclass::myclass()
{
std::cout<<"I am the constructor"<<std::endl;
}
std::string myclass::replace()
{
std::cout<<"I replace"<<std::endl;
}
答案 0 :(得分:2)
你说myclass::replace
每次调用时都会返回一个std::string
,但你实际上并没有return
任何东西!然后发生的事情进入了未定义行为的领域,这通常意味着你的程序行为不端,最终甚至可能kill your cat。
解决方案是在函数末尾添加return
语句。
答案 1 :(得分:1)
下面
obj.replace();
您已放弃返回值std::string
您可以丢弃返回值。一般来说这不是好的风格,但你总能做到。但实际问题是你没有从replace
函数返回任何内容:
std::string myclass::replace()
{
std::cout<<"I replace"<<std::endl;
//... return statement is missing
}
溶液:
std::string myclass::replace()
{
std::cout<<"I replace"<<std::endl;
return std::string();
}