【发布时间】:2009-11-22 22:14:03
【问题描述】:
问题已解决!非常感谢您的建设性建议!
我无法弄清楚以下代码中的错误是什么。我做包括的方式有什么问题吗?
// This is utils.h
#ifndef UTILS_H
#define UTILS_H
#include <iostream>
#include <fstream>
#include <stack>
#include <queue>
#include <vector>
#include <list>
#include <string>
#include <algorithm>
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vii> vvii;
typedef stack<int> si;
typedef queue<int> qi;
#define tr(c,i) for(typeof((c).begin()) i = (c).begin() ; i!=(c).end() ; ++i )
#define all(c) (c).begin(),(c).end()
#define cpresent(c,x) (find(all(c),x) != (c).end())
#endif
// ==============================================================
// Below is main.cpp
#include "utils.h"
int main() {
vi v;
}
在编译“g++ main.cpp”时,我收到以下错误消息:
utils.h:13:错误:“
这段代码有什么问题?当我没有#ifndefs 时,utils.h 过去可以正常工作。
【问题讨论】:
-
一种代码混淆工具,IMO。我可以理解特定于程序的 typedef,例如
typedef std::vector<std::string> NameList;。此外,cpresent 也可以是一个内联函数。而不是 tr,BOOST_FOREACH应该更便携(或者找一个支持 C++0x 的基于范围的 for 循环的编译器)。 -
我无法使用 BOOST。如果您可以为 vector
建议一个比键入 vector 本身更短的更好的 typedef,我将很高兴。 -
Typedef 主要不是为了减少输入,而是为了 a) 更具描述性的名称,b) 助记符的原因和 c) 如果在任何地方显式声明类型,您可以更轻松地在类型之间切换。
-
取决于向量的用途。如果是年龄列表,那么
typedef std::vector<int> age_list;不要编写程序试图保存击键,编写程序以增加可读性和解决问题。
标签: c++ compiler-errors