Hay otra forma más simplificada de hacer lo que quiere:simplemente cambie su declaración de test tst_("Hi");
a test tst_{"Hi"};
y funcionará A continuación se muestra el código modificado y funciona como se esperaba.
#include <iostream>
#include <string>
using namespace std;
class test
{
public:
test(std::string s):str(s){cout<<"str is: "<<s;}
private:
std::string str;
};
class test1
{
public:
test tst_{"Hi"};
};
int main()
{ test1 obj;
return 0;
}
Tenga en cuenta que acabo de cambiar test tst_("Hi");
al test tst_{"Hi"};
y todo lo demás es exactamente igual. Solo para confirmar que esto funciona, he agregado un cout para verificar que inicialice la variable str correctamente. Creo que esta solución de una línea es más elegante (al menos para mí) y está actualizada con el nuevo estándar.
No puede inicializar tst_
donde lo declaras. Esto solo se puede hacer por static const
tipos primitivos. En su lugar, deberá tener un constructor para class test1
.
EDITAR:a continuación, verá un ejemplo de trabajo que hice en ideone.com. Tenga en cuenta algunos cambios que hice. Primero, es mejor tener el constructor de test
toma un const
referencia a string
para evitar copiar. En segundo lugar, si el programa tiene éxito, debe return 0
no 1
(con return 1
obtiene un error de tiempo de ejecución en ideone).
#include <iostream>
#include <string>
using namespace std;
class test
{
public:
test(const std::string& s):str(s){};
private:
std::string str;
};
class test1
{
public:
test1() : tst_("Hi") {}
test tst_;
};
int main()
{
return 0;
}