Если вы объявляете анонимный объект с одним аргументом, просто поместите его в пару скобок!
ка скомпилировать:
class AnonymousClass
{
public:
AnonymousClass(int x)
{
}
};
int main()
{
int x;
AnonymousClass(x);
return 0;
}
генерирует ошибки из MSVC:
foo.cpp(13) : error C2371: 'x' : redefinition; different basic types
foo.cpp(12) : see declaration of 'x'
foo.cpp(13) : error C2512: 'AnonymousClass' : no appropriate default constructor available
Сообщения об ошибках g ++ похожи:
foo.cpp: In function ‘int main()’:
foo.cpp:13: error: conflicting declaration ‘AnonymousClass x’
foo.cpp:12: error: ‘x’ has a previous declaration as ‘int x’
foo.cpp:12: warning: unused variable ‘x’
Это легко исправить, давAnonymousClass
возражать против явного имени, но что здесь происходит и почему? Я предполагаю, что это более странный синтаксис объявления (как в случаях, описанных вQ10.2 а такжеQ10.21 из comp.lang.C ++ FAQ), но я не знаком с этим.