class Outer {
class Inner {
public:
Inner() {}
void func() ;
};
private:
static const char* const MYCONST;
int var;
};
void Outer::Inner::func() {
var = 1;
}
const char* const Outer::MYCONST = "myconst";
Kesalahan ini keluar ketika saya mengkompilasi dengan kelas Outer :: Inner 'tidak memiliki anggota bernama `var'
c++
inner-classes
kal
sumber
sumber
Kelas dalam memiliki akses ke semua anggota kelas luar, tetapi tidak memiliki referensi implisit ke instance kelas induk (tidak seperti beberapa keanehan dengan Java). Jadi, jika Anda meneruskan referensi ke kelas luar ke kelas dalam, itu bisa merujuk apa pun di instance kelas luar.
sumber
Apa pun yang merupakan bagian dari Luar harus memiliki akses ke semua anggota Luar, publik atau pribadi.
Edit: kompiler Anda benar, var bukan anggota Inner. Tetapi jika Anda memiliki referensi atau penunjuk ke sebuah instance dari Luar, itu dapat mengaksesnya.
sumber
var bukan anggota kelas dalam.
Untuk mengakses var, pointer atau referensi ke instance kelas luar harus digunakan. misalnya pOuter-> var akan berfungsi jika kelas dalam adalah teman dari luar, atau, var bersifat publik, jika seseorang mengikuti standar C ++ dengan ketat.
Beberapa kompiler memperlakukan kelas dalam sebagai teman luar, tetapi beberapa mungkin tidak. Lihat dokumen ini untuk kompiler IBM :
"Kelas bertingkat dideklarasikan dalam lingkup kelas lain. Nama kelas bertingkat bersifat lokal untuk kelas yang melingkupinya. Kecuali Anda menggunakan penunjuk eksplisit, referensi, atau nama objek, deklarasi dalam kelas bertingkat hanya dapat menggunakan konstruksi yang terlihat, termasuk ketik nama, anggota statis, dan enumerator dari kelas penutup dan variabel global.
Fungsi anggota kelas bersarang mengikuti aturan akses biasa dan tidak memiliki hak akses khusus untuk anggota kelas yang melingkupinya. Fungsi anggota dari kelas yang melingkupi tidak memiliki akses khusus ke anggota kelas bertingkat. "
sumber
friend
ataupublic
. Siapa yang peduli jika IBM salah / ketinggalan zaman, di masa lalu, di link mati? Jawaban ini sudah ketinggalan zaman 3 tahun sebelum diposting.Pertama-tama, Anda mencoba mengakses anggota non-statis di
var
luar kelas yang tidak diizinkan di C ++.Jawaban Mark benar.
Jadi Anda bisa melakukan dua hal, baik mendeklarasikan
var
sebagaistatic
atau menggunakan referensi dari sebuah instance dari kelas luar untuk mengakses 'var' (karena kelas atau fungsi teman juga membutuhkan referensi untuk mengakses data pribadi).Var statis
Ubah
var
kestatic
Jika Anda tidak inginvar
dikaitkan dengan instance kelas.Output- var: 1
Variabel non-statis
Referensi objek adalah harus mengakses variabel anggota non-statis.
Output- var: 1
Edit - Tautan luar adalah tautan ke Blog saya.
sumber