package - 艾达 : operator is not directly visible

标签 package operator-keyword ada visible

我正在使用 GNAT GPS studio IDE 来在 Ada 中进行一些训练。我遇到了包可见性问题。

首先,我在名为“DScale.ads”的文件中指定一个包,其中包含以下类型:

package DScale is 
   type DMajor is (D, E, F_Sharp, G, A, B, C_Sharp);
end DScale;

然后,我在另一个文件(“Noteworthy.ads”)中指定一个包,该包定义将使用 DScale 包的 DMajor 类型的过程:

with Ada.Text_IO;
with DScale;

package NoteWorthy is 
   procedure Note;
end NoteWorthy;

最后,在“Noteworthy.adb”中,我提供了“Noteworthy”包的包体:

with Ada.Text_IO; use Ada.Text_IO;

package body Noteworthy is
   procedure Note is 
      package ScaleIO is new Enumeration_IO(DScale.DMajor);
      thisNote : DScale.DMajor := DScale.D;   
   begin
      ScaleIO.Get(thisNote);

      if thisNote = DScale.DMajor'First then 
         Put_Line("First note of scale.");
      end if;
   end Note;
begin
   null;   
end NoteWorthy;
<小时/>

如果我按原样保留代码,则“Noteworthy”包正文中的“if thisNote = DScale.DMajor'First then”语句将出现“操作符不直接可见”错误。

有没有办法在不使用“use”或“use type”子句的情况下绕过此错误?

谢谢。

最佳答案

您的问题(至少)有两个答案。

1:

if DScale."=" (thisNote, DScale.DMajor'First) then

2:

function "=" (Left, Right : DScale.DMajor) return Boolean renames DScale.DMajor;
...
if thisNote = DScale.DMajor'First then

但是为什么要使用这些选项之一而不是:

use type DScale.DMajor;
...
if thisNote = DScale.DMajor'First then

关于package - 艾达 : operator is not directly visible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25591500/

相关文章:

c++ - 使用按值返回在c++中重载赋值运算符

c# - 判断可能出现的字符串赋值运算符异常

java - 如何访问私有(private)包类的公共(public)成员?

R install.packages 返回 "failed to create lock directory"

jenkins - 从命令行调用时覆盖 rpmbuild 构建位置

c++ - 在命名空间中使用正确的语法实现非成员重载运算符

Notepad++ 和 Ada

ada - 关于阿达(Ada)的 "range"

ada - 在 Ada 中使用 Pragma

c# - 运行程序需要哪些 C++ 包?