【发布时间】:2014-07-28 17:03:58
【问题描述】:
很久没用过C++了。我正在尝试显示一些多态行为:
class func {
public:
virtual void print() = 0;
};
class func1 : public func {
public:
void print () { cout << "FUNC 1" << endl; };
};
class func2 : public func {
public:
void print () { cout << "FUNC 2" << endl; };
};
static map<string,func *> myMap;
static func1 f1 = func1 ();
static func2 f2 = func2 ();
myMap["func1"] = &f1;
myMap["func2"] = &f2;
所以在我的主函数中,当我调用时:
myMap["func1"]->print();
myMap["func2"]->print();
我希望:
FUNC 1
FUNC 2
不确定这是否是正确的方法。当我编译代码时,它给了我这个错误:
test.cc:31: error: expected constructor, destructor, or type conversion before ‘=’ token
test.cc:32: error: expected constructor, destructor, or type conversion before ‘=’ token
指的是这些行:
myMap["func1"] = &f1;
myMap["func2"] = &f2;
谢谢。
【问题讨论】:
-
这些语句
myMap["func1"] = &f1;、myMap["func2"] = &f2;是否出现在函数定义体之外? -
@πάνταῥεῖ 他们很可能是。
-
是的。我明白了,现在我的代码可以编译了。为什么它们必须在函数定义中?
-
static func1 f1 = func1 ();应该是static func1 f1; -
@NeilKirk
static func1 f1 = func1 ();不是合法的 C++ 代码吗?
标签: c++ stl virtual abstract-base-class