скрытый параметр - PullRequest
       7

скрытый параметр

5 голосов
/ 10 июня 2011

почему второй конструктор скрывает первый?

class RC2{
    private;
        bool keyset;
    public:
        RC2(uint32_t t1 = 64){
            keyset = false;
        }

        RC2(const std::string KEY, uint32_t t1 = 64){
            RC2(t1);
            //setkey(KEY);
        }
};

дает мне: error: declaration of 'RC2 t1' shadows a parameter

я бы подумал, что компилятору не удастся испортить различие междуэти

я использую кодовые блоки gcc с C ++ 0x

Ответы [ 2 ]

9 голосов
/ 10 июня 2011

Поскольку RC2(t1); является аргументом затенения объявления локальной переменной t1, а не вызовом другого конструктора.Следующий код также действителен:

int main(int argc,char* args[])
{
  int(a);
  a = 2;
  return a;
}

Примечание!До C ++ 11 не было способа вызвать другой конструктор в том же классе из конструктора в C ++.Если вы используете старую версию C ++, создайте Init() -метод, который вызывают оба конструктора.

4 голосов
/ 10 июня 2011

Ошибка не вызывается объявлением конструктора.

Ошибка возникает в строке, которая объявляет переменную t1 типа RC2 в блоке второго конструктора. Эта переменная затеняет одноименную переменную t1, передавшую аргумент конструктору.

Я предполагаю, что с помощью RC2(t1); вы намеревались вызвать другой конструктор, но это невозможно в C ++. Это будет возможно в C ++ 2011, но с использованием другого синтаксиса.

...