Ada cara lain yang lebih sederhana untuk melakukan apa yang Anda inginkan:Ubah saja pernyataan Anda dari test tst_("Hi");
ke test tst_{"Hi"};
dan itu akan berhasil. Di bawah ini adalah kode yang dimodifikasi dan berfungsi seperti yang diharapkan.
#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;
}
Perhatikan bahwa saya baru saja mengubah test tst_("Hi");
ke test tst_{"Hi"};
dan yang lainnya persis sama. Hanya untuk konfirmasi bahwa ini berfungsi, saya telah menambahkan satu cout untuk memeriksa apakah ini menginisialisasi variabel str dengan benar. Menurut saya, solusi satu baris ini lebih elegan (setidaknya bagi saya) dan terkini dengan standar baru.
Anda tidak dapat menginisialisasi tst_
tempat Anda mendeklarasikannya. Ini hanya dapat dilakukan untuk static const
tipe primitif. Sebagai gantinya, Anda harus memiliki konstruktor untuk class test1
.
EDIT:di bawah, Anda akan melihat contoh kerja yang saya lakukan di ideone.com. Perhatikan beberapa perubahan yang saya lakukan. Pertama, lebih baik memiliki konstruktor test
ambil const
referensi ke string
untuk menghindari penyalinan. Kedua, jika program berhasil Anda harus return 0
bukan 1
(dengan return 1
Anda mendapatkan kesalahan runtime di 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;
}