#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*{"
部分的错误消息。期望一个类型说明符。我一定做错了什么?
答案 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
并接受一个类型的参数....然后他不能得到它应该是什么类型。