C ++期望一个类型说明符(正则表达式)

时间:2012-10-29 07:06:24

标签: c++ regex syntax-error

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <regex>

using namespace std;

class Parser {
protected:
    // regex: containers
    static const regex rxProc("procedure\s+([\w]+)\s*{");
}

我收到了"procedure\s+([\w]+)\s*{"部分的错误消息。期望一个类型说明符。我一定做错了什么?

2 个答案:

答案 0 :(得分:1)

在这里查看其他答案,了解您实际上是在询问编译器。如果你想在课堂上做一个常数 - 我在这里提供一个解决方案。

在C ++中使用静态成员很有趣,但仅适用于POD(普通旧数据)成员。对于更复杂的成员,事情变得丑陋。即使对于char*,这也不会扩大规模。使用好的旧C #define有时候是个好主意 - 即使在C ++中也是如此;

这样的事情会解决您的编译问题。使用#if 0来触发旧代码,然后使用g++ -std=gnu++0x -c test1.cpp

进行编译
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <regex>

using namespace std;

#if 0
// my fix

// in your H file
class Parser {
protected:
    // regex: containers
    static const regex rxProc;
};    
// in your CPP file
const regex Parser::rxProc = regex("procedure\\s+([\\w]+)\\s*{");
#else

// your old code
class Parser {
protected:
    // regex: containers
    static const regex rxProc("procedure\\s+([\\w]+)\\s*{");
};
#endif

(甚至没有涉及使用正则表达式来定义语法树...或解析Pascal文件的问题......这只是个坏主意而且会破坏哦,所以很多次......不)

答案 1 :(得分:0)

编译器认为你声明一个静态函数rxProc返回const regex并接受一个类型的参数....然后他不能得到它应该是什么类型。