Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148726
  • 博文数量: 54
  • 博客积分: 1732
  • 博客等级: 上尉
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-23 23:29
文章分类

全部博文(54)

文章存档

2011年(3)

2010年(26)

2009年(25)

分类: C/C++

2009-11-16 20:06:03

 在实践《TC++PL》第8章描述的desk calculator时,得到一点点经验,记录于此。

背景描述
我的main.cc文件中有如下片段;


//...
#include "Lexer.h"            //get_Token() and so on
#include "myError.h"        //error();
#include "Driver.h"

int main( int argc, char* argv[])
{
    //定义内建常数

    Lexer::table["pi"] = 3.1415926;
    Lexer::table["e"]    = 2.7182818;

     //...

Driver.h 文件中有如下片段

 //...

#ifndef __DRIVER_H__
#define __DRIVER_H__

#include <iostream>

namespace Driver{
    int numOfErr =0 ;            //用于记录运行过程中发生的错误数量
     //...


make之后出现错误:
g++    -c -I include -o main.o src/main.cc
In file included from src/main.cc:44:0:
include/Driver.h:19:1: 错误:expected unqualified-id before ‘namespace’
include/Driver.h:25:6: 错误:‘Driver’ has not been declared
include/Driver.h: 在函数‘void Error::skip()’中:
include/Driver.h:27:4: 错误:‘numOfErr’在此作用域中尚未声明
src/main.cc: 在函数‘int Error::main(int, char**)’中:
src/main.cc:62:39: 错误:‘Driver’ has not been declare
…………后面不再一一列举,反正都是因为Driver没声明引起的

我盯着Driver.h看了半天,这个namespace怎么不能定义呢,N次尝试之后,终于注意到了下面这条信息中的"before"
include/Driver.h:19:1: 错误:expected unqualified-id before ‘namespace’
而且前面有In file included from src/main.cc
也就是说这是编译main.cc时发生的错误,此时Driver.h作为一部分被include进来了
同样的,myError.h Lexer.h都被include进来了,而报的信息提示是在"namespace"前面,那就进
myError.h看看吧,果然找到了问题所在,其中有如下片段:

 

    struct SyntaxError{
        const char* what;
        SyntaxError(const char* msg):what(msg){}
    }
            // end namespace Error


#endif        //end myError.h

到这里错误很明显了,struct SyntaxError定义的末尾没有";",而且对应namespace Error结尾的"}"没有了,改正后,顺利make
阅读(935) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~