Syntax 合法和非法使用“::`

Syntax 合法和非法使用“::`,syntax,verilog,system-verilog,Syntax,Verilog,System Verilog,我研究了这样的代码。例如: typedef C; C::T x; //illegal; typedef C::T c_t; //legal c_t y; class C; typedef int T; endclass 为什么第一次使用::of非法,第二次使用::of合法?双冒号用于范围解析运算符。它用于访问包中的类和类中的静态数据 您可以在的第14页找到良好的用法示例。这是类范围解析运算符。它用于指定在类范围内定义的标识符。由于类和其他作用域可以具有相同的标识符,因此类作用域解析运

我研究了这样的代码。例如:

typedef C;
C::T x; //illegal;

typedef C::T c_t; //legal
c_t y;

class C;
   typedef int T;
endclass

为什么第一次使用::of非法,第二次使用::of合法?

双冒号用于范围解析运算符。它用于访问包中的类和类中的静态数据


您可以在的第14页找到良好的用法示例。

这是类范围解析运算符。它用于指定在类范围内定义的标识符。由于类和其他作用域可以具有相同的标识符,因此类作用域解析运算符可以唯一地标识特定类的成员、参数或局部参数


有关更多信息,请参见第8.23章“类作用域解析运算符”。

SystemVerilog要求必须知道类型标识符是一种类型,然后才能引用该类型。本示例来源于1800-2017 LRM第6.18节的开头部分

声明x的问题在于,此时C::T不是已知的类型

当您将typedef放在C::T前面时,解析器知道它必须是一个类型,没有其他有效的选择