2014-04-11 84 views
1

这是我的主文件(一触发错误):奇怪的错误导入时模块

/********************************************************** 
** 
** LOGRAMM 
** Interpreter 
** 
** (c) 2009-2014, Dr.Kameleon 
** 
********************************************************** 
** expression.d 
**********************************************************/ 

module expression; 

//================================================ 
// Imports 
//================================================ 

import std.stdio; 
import std.conv; 

import components.argument; 

//================================================ 
// C Interface for Bison 
//================================================ 

extern (C) 
{ 
    void* Expression_new(Expression l, char* op, Expression r) { return cast(void*)(new Expression(l,to!string(op),r)); } 
    void* Expression_newFromArgument(Argument a) { return cast(void*)(new Expression(a)); } 
} 

//================================================ 
// Functions 
//================================================ 

class Expression 
{ 
    Expression left; 
    string operator; 
    Expression right; 

    Argument arg; 

    this(Expression l, string op, Expression r) 
    { 
     left = l; 
     operator = op; 
     right = r; 

     arg = null; 
    } 

    this(Argument a) 
    { 
     arg = a; 
    } 

    void print() 
    { 
     writeln("Expression: "); 
     if (!arg) 
     { 
      writeln("\t | Operator: " ~ operator ~ ", Left: "); 
      left.print(); 
      writeln("Right: "); 
      right.print(); 
     } 
     else 
     { 
      writeln("\t | Argument: "); 
      arg.print(); 
     } 
    } 
} 

这是我得到错误(有喜欢的20个不同的模块,它是第一次我得到这种类型的错误的):

components/expression.d(21): Error: module argument from file components/argument.d must be imported as module 'argument' 

(21开头的import...线)

任何想法这里发生了什么?


P.S.

  • 我一直在编码连续近15个小时,所以我想这可能是一些真的明显,我不能够发现...

  • 我以前也试过import argument; - 但这没有太大的差别,无论如何,由于argument.d文件是在components,很像是我进口在其他地方的任何其他文件...

回答

2

尝试通过import argument;导入模块。或者,打开argument.d模块并将其模块声明添加或更改为:module components.argument;

+0

那么,'进口论点;'的想法不*工作。但最后一个,工作很好!非常感谢!你为我节省了很多时间! :-) –

+2

是的,规则应该是,如果一个文件被导入到任何地方,确保它包含一个明确的'module name.here;'在它的顶部,每一次,最终这种事情都会咬你。 –