I created in an include.hpp two C++ classes:
#include <string>
#include <map>
#include <iostream>
#include <sstream>
#include<vector>
using namespace std;
class A {
public:
vector<char> v;
A(){};
A(A &other) {
v = other.v;
}
A(string s) {
v.assign(s.begin(), s.end());
}
A& operator << (std::string s) {
v.insert(v.end(), s.begin(), s.end());
return(*this);
};
};
class B {
protected:
A a;
public:
template<typename T>
B(T &t): a(t) {}
};
I need now to create an instance by entering to its constructor an A object. In addition the A object has to be a returned value of an other function that creates the returned A instance with the operator <<
I'm trying with the following main:
#include<iostream>
#include "include.hpp"
using namespace std;
A& createstrbyappend() {
A a;
a << "aa";
return a;
}
int main() {
A aa;
aa << "kkk";
cout << "create b1 object " << endl;
B* b1 = new B(aa);
cout << "create b2 object " << endl;
B* b2 = new B(createstrbyappend());
cout << "End program " << endl;
}
But I get a segmentation fault with this main, I get as output:
create b1 object
create b2 object
Segmentation fault (core dumped)
b1 is created successfully, but b2 that's created through the function createstrbyappend gives the segmentation fault.
Is there a suggestion how I can fix the issue ?
EDIT: add compiler version
I'm compiling with g++ command under ubuntu. my g++ version is the following:
$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.