Как решить неоднозначную ситуацию между одноименной функцией и классом?

Этот код компилируется без каких-либо проблем, если test не вызывается, поэтому я заключаю, что c ++ позволяет создавать класс и функцию с одинаковым именем:

class test {};
void test() {}

int main() {
test an_instance_of_test;
}

ошибка:

<stdin>: In function 'int main()':
<stdin>:5:8: error: expected ';' before 'an_instance_of_test'
<stdin>:5:27: warning: statement is a reference, not call, to function 'test' [-Waddress]

И я знаю, что в первую очередь я не должен создавать такую ​​однозначность, но, тем не менее, это может произойти в чужом коде, и я спрашиваю, есть ли выход из этого без изменения функции или определения класса.

2

Решение

Вы должны использовать разработанный спецификатор типа:

class test an_instance_of_test;

Как сказано в стандарте (§3.4.4):

уточненный тип Спецификатор (7.1.6.3) может использоваться для ссылки на ранее объявленный Имя_класса или же перечисление имя даже если имя было скрыто объявлением не-типа.

Поиск имени просто игнорирует любые имена не-типов:

Идентификатор ищется в соответствии с 3.4.1, но игнорируется любое нетипичное имя, которое было объявлено.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]