Compiler gives error: "Does not name a type" immediately after declared
Compiler gives error: "Does not name a type" immediately after declared
我的项目中有一段代码用于使用 ncurses 构建 C++ roguelike。我正在努力让玩家可以持有两把武器。我创建了一个 weaponItem class 和两个对象,但编译器仍然抛出 'does not name a type' 错误。
代码:
weaponItem weapon1;
weaponItem weapon2;
weapon1.setType(DMW_DAGGER);
weapon2.setType(DMW_SBOW);
weapon1.setPrefix(DMWP_AVERAGE);
weapon2.setPrefix(DMWP_RUSTY);
编译器错误:
In file included from main.cpp:2:0:
hero.h:17:2: error: ‘weapon1’ does not name a type
weapon1.setType(DMW_DAGGER);
^
hero.h:18:2: error: ‘weapon2’ does not name a type
weapon2.setType(DMW_SBOW);
^
hero.h:20:2: error: ‘weapon1’ does not name a type
weapon1.setPrefix(DMWP_AVERAGE);
^
hero.h:21:2: error: ‘weapon2’ does not name a type
weapon2.setPrefix(DMWP_RUSTY);
^
我的class或对象声明有问题吗?
我认为您误解了错误消息和一些评论。
假设你有 class/struct.
struct Foo
{
Foo() : a(0) {}
void set(int in) { a = 10; }
int a;
};
您可以在函数定义之外定义 Foo
类型的对象。
// OK
Foo foo1;
但是,您不能单独调用class外部函数定义的成员函数。
// Not OK in namespace scope or global scope.
foo1.set(20);
您可以在文件中的函数定义内进行函数调用。
// OK.
void testFoo()
{
foo1.set(20);
}
如果您使用其 return 值来初始化另一个变量,则可以在函数定义之外调用成员函数。
struct Foo
{
Foo() : a(0) {}
void set(int in) { a = 10; }
int get() { return a; }
int a;
};
// OK
Foo foo1;
int x = foo1.get();
我的项目中有一段代码用于使用 ncurses 构建 C++ roguelike。我正在努力让玩家可以持有两把武器。我创建了一个 weaponItem class 和两个对象,但编译器仍然抛出 'does not name a type' 错误。
代码:
weaponItem weapon1;
weaponItem weapon2;
weapon1.setType(DMW_DAGGER);
weapon2.setType(DMW_SBOW);
weapon1.setPrefix(DMWP_AVERAGE);
weapon2.setPrefix(DMWP_RUSTY);
编译器错误:
In file included from main.cpp:2:0:
hero.h:17:2: error: ‘weapon1’ does not name a type
weapon1.setType(DMW_DAGGER);
^
hero.h:18:2: error: ‘weapon2’ does not name a type
weapon2.setType(DMW_SBOW);
^
hero.h:20:2: error: ‘weapon1’ does not name a type
weapon1.setPrefix(DMWP_AVERAGE);
^
hero.h:21:2: error: ‘weapon2’ does not name a type
weapon2.setPrefix(DMWP_RUSTY);
^
我的class或对象声明有问题吗?
我认为您误解了错误消息和一些评论。
假设你有 class/struct.
struct Foo
{
Foo() : a(0) {}
void set(int in) { a = 10; }
int a;
};
您可以在函数定义之外定义 Foo
类型的对象。
// OK
Foo foo1;
但是,您不能单独调用class外部函数定义的成员函数。
// Not OK in namespace scope or global scope.
foo1.set(20);
您可以在文件中的函数定义内进行函数调用。
// OK.
void testFoo()
{
foo1.set(20);
}
如果您使用其 return 值来初始化另一个变量,则可以在函数定义之外调用成员函数。
struct Foo
{
Foo() : a(0) {}
void set(int in) { a = 10; }
int get() { return a; }
int a;
};
// OK
Foo foo1;
int x = foo1.get();