1
#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*{"部分的错误。需要一个类型说明符。我一定做错了什么?

4

2 回答 2

2

查看此处的其他答案以了解您实际询问编译器的内容。如果你想在你的类中创建一个常量 - 我在这里提供了一个解决方案。

在 C++ 中使用静态成员很有趣,但仅适用于 POD(plain-old-data)成员。对于更复杂的成员,事情变得丑陋。即使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 文件......这只是个坏主意,会破坏哦,所以,很多次......只是不要)

于 2012-10-29T07:15:15.633 回答
1

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

于 2012-10-29T07:08:55.700 回答