Я хочу знать, можно ли инициализировать защищенный статический член из подкласса.
Например,
Инициализировать защищенный статический член из подкласса
// head file
class Test
{
protected:
static int i;
};
class Test2 : public Test{};
//cpp file
#include "headfile.h"
int Test2::i = 1;
Как вы видите, когда я инициализировать этот статический член (I), я использую имя подкласса (Test2).
К моему удивлению, я тестировал этот код с визуальной студией 2013 года, и он работал без ошибок. Но если бы я попробовал с Netbeans (gcc11) под Linux, и я получил ошибку намека:
unable to resolve the identifier i
Тогда я скомпилировал, сообщение об ошибке:
error: ISO C++ does not permit ‘Test::i’ to be defined as ‘Test2::i’ [-fpermissive]
Теперь, если я изменю защищаемую общественность static int i
в классе Test, ошибка исчезнет.
Я запутался ... Это мой первый раз, когда я нашел два различных результата с НКУ и VS.
Как вы протестировали его в визуальной студии? был ли тест/код идентичным тому, что вы делали в netbeans? Я бы подумал, что это ошибка, учитывая, что вы пытаетесь публично получить доступ к частной переменной. –
@MarshallTigerus Я уверен, что это точно такой же код, потому что я его копирую. На самом деле я пробовал частный и защищенный, оба они не работали. ТОЛЬКО общественность работала. – Yves
Clang по-прежнему не принимает его после изменения доступа 'i' к' public'. – chris