С++ начальная ошибка сегментации при использовании строк

Я пытаюсь создать базовый класс, используя std :: string как тип функции и тип переменной, но использование обоих дает мне ошибку сегментации. Если я удалю либо функцию, либо переменную, все будет в порядке. Я уверен, что я делаю глупую ошибку! Это мой код: main.cpp

#include <iostream>
#include <cstdlib>
#include <string>
#include "myclass.h"
int main()
{ myclass obj; obj.replace(); return EXIT_SUCCESS;
};
</string></cstdlib></iostream>

myclass.h

#ifndef MYCLASS_H_
#define MYCLASS_H_
#include <string>
class myclass
{ private: std::string instruction; public: myclass(); std::string replace();
};
#endif
</string>

myclass.cpp

#include "myclass.h"
#include <iostream>
myclass::myclass()
{ std::cout<<"I am the constructor"<</iostream>
2 ответа

Вы сказали, что myclass::replace было возвращать std::string каждом вызове, но вы на самом деле ничего не return ! То, что произошло, затем входит в сферу неопределенного поведения, что обычно означает, что ваша программа будет плохо себя вести и в конечном итоге может даже убить вашу кошку.

Решение состоит в том, чтобы добавить оператор return в конце функции.


Вот

obj.replace();

вы отбросили возвращаемое значение, std::string Вы можете отменить возвращаемое значение. Это не хороший стиль в целом, но вы всегда можете это сделать. Но фактическая проблема заключается в том, что вы ничего не возвращаете из функции replace:

std::string myclass::replace()
{ std::cout<<"I replace"<
<p> решение:</p> <pre class="prettyprint linenums">std::string myclass::replace() { std::cout<<"I replace"<</pre><code>

licensed under cc by-sa 3.0 with attribution.