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

Я пытаюсь создать базовый класс, используя 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&lt;&lt;"I replace"&lt;</pre><code>

licensed under cc by-sa 3.0 with attribution.