2016-11-09 2 views
1

время изображения!Если в той же области есть класс и переменная с тем же именем, как указать класс?

struct my_struct { 
       ___________ class name (A) 
       ↓ 
    struct pineapple {}; 
    pineapple pineapple; 
       ↑______________ variable name (B) 

        ____________ seems to be referring to B instead of A 
        ↓ 
    my_struct(pineapple pineapple) { 
     this->pineapple = pineapple; 
    } 
}; 

Таким образом, существует класс и переменная, использующие одно и то же имя. Хотя это обычно не беспокоит C++, в случае функциональных параметров (таких как конструктор), кажется, предпочитает имя локальной переменной над классом.

Есть ли способ указать, что я имею в виду класс, а не переменную?

ответ

3

Зачем вам это делать самому?

Во всяком случае, вы можете использовать elaborated type specifier к неоднозначности:

struct my_struct { 
    struct pineapple {}; 
    pineapple pineapple; 

    my_struct(struct pineapple pineapple) { 
       ^^^^^^ 
     this->pineapple = pineapple; 
    } 
}; 

demo

Это, как говорится, это действительно странно, дизайн, я бы избежать.

+0

о том, почему все члены ананаса являются подгруппой членов my_struct, которые мне пришлось придерживаться в вложенной структуре, потому что ананас должен унаследовать и реализовать сторонний ui-класс. Поскольку я не мог найти достойный синоним для ананаса, другим вариантом было добавить символы подчеркивания или что-то одно из имен .. но мне не понравилось, как это выглядело ¯ \\ _ (ツ) _/¯ – user81993

+2

use ananas, пожалуйста. Или pineapple_t (или _v). Именование вещей сложно, я знаю, но не до такой степени, что вам нужно повторно использовать имена в одной области: P – krzaq

Смежные вопросы