C++ 错误:在';{';代币

C++ 错误:在';{';代币,c++,C++,我想知道你们是否能帮我解决我在下面评论的一些错误。真不敢相信我已经有这么多了 class CalculusWizard { private: const static char varChars[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

我想知道你们是否能帮我解决我在下面评论的一些错误。真不敢相信我已经有这么多了

class CalculusWizard
{

    private: 
        const static char varChars[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; // error: a brace-enclosed initializer is not allowed here before '{' token, error: invalid in-class initialization of static data member of non-itegral type 'const char[]'
        const static size_t varCharsLen = sizeof(varChars) / sizeof(const char); 
        const static enum functop = {NONE, PLUS, MINUS, TIMES, DIVIDE, COMPOSITION}; // error: use of enum 'functop' without previous declaration, error: unexpected qualified-id before '=' token
        bool isVariable(const char &);

    public: 
        CalculusWizard();
        ~CalculusWizard();
        std::string derivative(std::string &, const char &, unsigned &);

};

bool CalculusWizard::isVariable(const char & c)
{
    char * thisptr = varChars; // error: 'varChars' was not declared in this scope
    char * offend = varChars + varCharsLen;
    while (thisptr != offend)
        if (*thisptr++ == c)
            return true;
    return false;
    /*
     Alternatively, return c >= 'a' && c <= 'z'
}
类计算向导
{
私人:
const static char varChars[]={'a',b',c',d',e',f',g',h',i',j',k',l',m',n',o',p',q',r',s',t',u',v',w',x',y',z'};//错误:在“{”标记之前不允许使用大括号括的初始值设定项,错误:非itegral类型“const char[]的静态数据成员的类内初始化无效
常量静态大小\u t varCharsLen=sizeof(varChars)/sizeof(常量char);
const static enum functop={NONE,PLUS,MINUS,TIMES,DIVIDE,COMPOSITION};//错误:在没有先前声明的情况下使用枚举“functop”,错误:在“=”标记之前出现意外的限定id
bool是变量(const char&);
公众:
计算向导();
~z~计算向导();
std::string导数(std::string&,const char&,unsigned&);
};
bool CalculusWizard::isVariable(const char&c)
{
char*thisptr=varChars;//错误:“varChars”未在此范围内声明
char*off=varChars+varCharsLen;
while(thisptr!=冒犯)
如果(*thisptr++==c)
返回true;
返回false;
/*

或者,返回c>='a'&&c或者将编译器升级到支持c++11的编译器,或者将定义放在类之外。枚举语法似乎根本不正确。@BenVoigt:ideone.com的c++11抱怨试图从括号括起的列表中初始化静态成员
varChars
;同时,将其定义移动到low该类导致它抱怨正在对不完整的类型()调用
sizeof
。不确定是否有任何方法可以将该数组的大小转换为编译时常量。@j_random_hacker:看不出您的问题。当然,
sizeof
的使用遵循了决定大小的定义。@BenVoigt:唯一的限制似乎是必须在类声明中声明的任何内容都不能使用
>varCharsLen
作为编译时常量——例如,
在中不起作用[]
。但实际上,在定义之后,它似乎以这种方式可用(例如,for
将起作用[]
thisWorks[]
)。