Es gibt einen anderen und einfacheren Weg, das zu tun, was Sie wollen:Ändern Sie einfach Ihre Aussage von test tst_("Hi");
bis test tst_{"Hi"};
und es wird funktionieren. Unten ist der modifizierte Code und er funktioniert wie erwartet.
#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;
}
Beachten Sie, dass ich gerade test tst_("Hi");
geändert habe bis test tst_{"Hi"};
und alles andere ist genau gleich. Nur zur Bestätigung, dass dies funktioniert, habe ich einen Cout hinzugefügt, um zu überprüfen, ob die str-Variable korrekt initialisiert wird. Ich denke, diese einzeilige Lösung ist eleganter (zumindest für mich) und auf dem neuesten Stand des neuen Standards.
Sie können tst_
nicht initialisieren wo Sie es deklarieren. Dies ist nur für static const
möglich primitive Typen. Stattdessen benötigen Sie einen Konstruktor für class test1
.
BEARBEITEN:Unten sehen Sie ein funktionierendes Beispiel, das ich in ideone.com gemacht habe. Beachten Sie einige Änderungen, die ich vorgenommen habe. Erstens ist es besser, den Konstruktor von test
zu haben nimm eine const
Verweis auf string
Kopieren zu vermeiden. Zweitens, wenn das Programm erfolgreich ist, sollten Sie return 0
nicht 1
(mit return 1
Sie erhalten einen Laufzeitfehler in 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;
}