符号不能在using声明中使用

时间:2014-04-29 19:51:25

标签: c++

我有一个标题,我的基本问题是using关键字。

#ifndef SHAPEFACTORY_H__
#define SHAPEFACTORY_H__

#include <istream>
#include <map>
#include <string>
#include "shape.h"


/* thrown when a shape cannot be read from a stream */
template<class T>
class WrongFormatException { };

template<class T>
class ShapeFactory
{
public:
    using createShapeFunction=Shape<T>*()(void);
    static void registerFunction(const std::string &, const createShapeFunction *);
    static Shape<T> *createShape(const std::string &);
    static Shape<T> *createShape(std::istream &);
private:
    std::map<std::string, createShapeFunction *> creationFunctions;
    ShapeFactory();
    static ShapeFactory<T> *getShapeFactory();
};

#endif

我遇到了一些我无法解决的错误。

1>shapefactory.h(21): error C2873: 'createShapeFunction' : symbol cannot be used in a using-declaration
1>shapefactory.h(29) : see reference to class template instantiation 'ShapeFactory<T>' being compiled
1>shapefactory.h(21): error C2143: syntax error : missing ';' before '='
1>shapefactory.h(21): error C2238: unexpected token(s) preceding ';'
1>shapefactory.h(22): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>shapefactory.h(22): error C2143: syntax error : missing ',' before '*'
1>shapefactory.h(26): error C2065: 'createShapeFunction' : undeclared identifier
1>shapefactory.h(26): error C2059: syntax error : '>'
1>shapefactory.h(29): error C2143: syntax error : missing ';' before '}'
1>shapefactory.h(29): fatal error C1004: unexpected end-of-file found

任何想法都会很棒。

1 个答案:

答案 0 :(得分:2)

似乎编译器不支持别名decladation。将其替换为typedef声明。例如(至少编译代码)

#include <map>
#include <string>

template <typename T>
class Shape;

template<class T>
class ShapeFactory
{
public:
    typedef Shape<T>* createShapeFunction(void);
    static void registerFunction(const std::string &, const createShapeFunction *);
    static Shape<T> *createShape(const std::string &);
    static Shape<T> *createShape(std::istream &);
private:
    std::map<std::string, createShapeFunction *> creationFunctions;
    ShapeFactory();
    static ShapeFactory<T> *getShapeFactory();
};



int main() 
{

    return 0;
}