我在Ada中使用包ADS文件时遇到问题.我收到错误的"缺少私人类型的完整声明".我该如何处理?
这是我写的代码:
包LETTER_SPEC是
type LETTER是私有的;
程序DATE_OF_LETTER(THE_LETTER:in out LETTER; DATE:STRING);
程序RECIPIENT_NAME(THE_LETTER:in out LETTER; NAME:STRING);
程序SUBJECT_LINE(THE_LETTER:in out LETTER; SUBJECT:STRING);
程序TEXT_OF_LETTER(THE_LETTER:in out LETTER; TEXT:STRING);
程序SENDER_NAME(THE_LETTER:in out LETTER; NAME:STRING);
程序PUT_LETTER(THE_LETTER:in LETTER);
私人的
类型PTR_LETTER是访问STRING;
输入LETTER_DATA是
Run Code Online (Sandbox Code Playgroud)record DATE_OF_LETTER: PTR_LETTER; RECIPIENT_NAME: PTR_LETTER; SUBJECT_LINE: PTR_LETTER; TEXT_OF_LETTER: PTR_LETTER; SENDER_NAME: PTR_LETTER; end record;结束LETTER_SPEC;'
提前致谢..
我第一次使用Ada并且有一个txt文件,上面写着以下内容
23.000000#:599.659058,-67.651642
Run Code Online (Sandbox Code Playgroud)
我想在存档的换行符中添加一个R,所以它就像这样结束
23.000000#:599.659058,-67.651642
R,
Run Code Online (Sandbox Code Playgroud)
为此,我使用以下代码
Open (File => out_parcial_variante1, Name => "c.txt", Mode => out_file);
new_line(out_parcial_variante1);
put(File => out_parcial_variante1, Item=> "R,");
close(out_parcial_variante1);
Run Code Online (Sandbox Code Playgroud)
但是这样做会删除存档中所有以前写入的数据,只留下新行和唯一的R,
我如何完全追加到文本的末尾这个文本,我似乎可以找到函数,这是我能想到的唯一方法
我有一个关于使用信号量的问题
HANDLE WINAPI CreateSemaphore(...);
Run Code Online (Sandbox Code Playgroud)
无论如何我能获得信号量的当前值吗?
我已经创建了一个将在GNAT Gcc编译器4.3.0中编译的Ada程序.我创建了一个包含姓名,电话,地址和生日的记录.名称,电话和地址将以无限字符串格式和生日记录另行记录.这里的目的是建立一个地址簿管理系统.(非常简单)
type birthday is record
year : Positive;
month : Positive;
day : positive;
end record;
type contact_type is record
name : unbounded_string;
phone : unbounded_string;
address : unbounded_string;
bday : birthday;
end record;
Run Code Online (Sandbox Code Playgroud)
我已经进行了插入(使用追加)和删除,以及列表功能.我需要一个搜索和排序功能来完成.
事情是我把这条记录(contact_type记录)变成了一个向量.现在我想从向量中搜索其中一个元素/子类(无论你怎么称呼它).
例如,搜索名称...或地址等.但是使用向量的find_index方法,我需要插入另一个类型为contact_type的记录,并且只返回完全相同的元素作为结果.
但我想要的是如果我搜索一个名字,所有带有名字的元素都会被返回......
并且有可能在名称,地址,Bday方面对"向量排序"向量(所以我有三种不同的排序选项)
PS.第一阿达程序我写是一个地址簿管理器...我一个完整的新手,我只在C的经验,和Java所以它还挺会粗糙...(我花了很长的时间寻找如何到标准输入和输出lol)
基本上,我有2个文件(.adb和.ads).我是Ada的新手,也是如何编译2个文件的.该程序是一个基本的堆栈实现.编译.adb文件时出现此编译错误.
$ gcc -c test_adt_stack.adb
abstract_char_stack.ads:22:01: end of file expected, file can have only one compilation unit
Run Code Online (Sandbox Code Playgroud)
我拥有的2个文件是: abstract_char_stack.ads
-----------------------------------------------------------
package Abstract_Char_Stack is
type Stack_Type is private;
procedure Push(Stack : in out Stack_Type;
Item : in Character);
procedure Pop (Stack : in out Stack_Type;
Char : out Character);
private
type Space_Type is array(1..8) of Character;
type Stack_Type is record
Space : Space_Type;
Index : Natural := 0;
end record;
end Abstract_Char_Stack;
-----------------------------------------------------------
package body Abstract_Char_Stack is
----------------------------------------------
procedure Push(Stack : …Run Code Online (Sandbox Code Playgroud) 我在使用 get_line 时遇到了一个小问题,我必须从文件中取出一行并使用它。我不知道特别是如果这些行不是由字符构成的,那么在这种情况下我可以使用 get_line 吗?谢谢你。让我们从这个小例子开始:
with Ada.Text_Io;
use Ada.Text_Io;
procedure Getline is
A:String;
T:string;
begin
Open(File => F, Mode => In_File, Name => Nom_Fichier);
A:=Get_Line(F,In_File, T);
Put(A);
end Getline;`
Run Code Online (Sandbox Code Playgroud) 我对OOP知之甚少,所以也许我的问题很愚蠢,但仍然......
您可以从过程(非OO)语言访问面向对象(OO)的API吗?例如,Win32 API不是OO,但我知道有一个C++的包装器可以使它成为OO.但是有可能两种方式吗?
我问,因为我不喜欢OO语言; 我通过编程微控制器来学习C语言,而OO语言只是将实际的代码从你身上移开,我担心OOP如此受欢迎,很快一切都将基于对象.
我自己做了一些开发,并希望将我的代码放入RCS中,为了方便起见,我希望它能够每晚自动提交所有更改的代码,并可选择在不同时间标记源代码以标记良好的构建.有什么建议?我正在使用ubuntu.
我想删除文件中的行.我知道你可以存储文件的内容(例如在矢量中),擦除行并再次写入.但是,它感觉非常麻烦,如果文件变大则效率不高.
谁知道更好,更有效,更优雅的方式呢?