从C中的结构中检索值时编译误差
Compile error when retrieving a value from a struct in C
我正在使用C 构建器XE4。我正在尝试将一些C代码编译到控制台应用程序中。C文件很大,因此我试图将重点放在问题上。该代码设置两个结构,然后试图调用失败的值。
struct ephloc
{
long first_item_ordinal;
long last_item_ordinal;
int days_per_record;
int items_per_record;
int total_records;
};
struct ephloc objs[15] = {
{ 641, 2210500, 8, 44, 50224},
{2210501, 3014088, 16, 32, 25112},
{3014089, 4043684, 16, 41, 25112},
{4043685, 4483148, 32, 35, 12556},
{4483149, 4809608, 32, 26, 12556},
{4809609, 5098400, 32, 23, 12556},
{5098401, 5349524, 32, 20, 12556},
{5349525, 5600648, 32, 20, 12556},
{5600649, 5851772, 32, 20, 12556},
{5851773, 6730696, 16, 35, 25112},
{6730697, 10849068, 4, 41, 100448},
{10849069,14967440, 4, 41, 100448},
{14967441,14967452, 401792, 8, 1},
{14967453,14967464, 401792, 8, 1},
};
下面的代码在[2]上停止,并显示以下两个错误。如何修改此代码以使其正常工作?
e2110:不兼容的类型转换(C (无法完成所请求的铸件。
e2062无效间接(C (
int LoadData( D, iobj, p, v )
double D;
int iobj;
double p[], v[];
{
int s;
//--Lots of code here--
s = objs[iobj][2];
//--more code here--
}
struct ephloc objs[15] = { /* whatever */ };
这将objs
定义为具有15个类型ephloc
元素的数组。
objs[iobj]
这将访问该数组的元素。由于每个元素具有ephloc
类型,因此此表达式为您提供了ephloc
。
objs[iobj][2]
这尝试访问数组的第二个元素。但是objs[iobj]
不是一个数组,因此编译器告诉您您不能那样做。
要访问该元素的成员,请使用成员名称:
objs[iobj].first_item_ordinal
这将访问对象objs[iobj]
的第一个成员。
这是" c 的情况,这只是c"的一个超集,再次被证明是错误的。您的C函数声明在被称为k& r语法的过时。这些早于现代功能原型,并且现在在C. C.中无效,从C 开始。就您的C 编译器而言,唯一有效的函数声明是:
int LoadData( double D, int iobj, double p[], double v[] )
{
您最好确保相应的标头文件与之匹配。k& r与"没有原型的函数"声明(即int LoadDate();
(汇手,在C 中,该声明是一个没有参数的函数。如果您也不调整它,那将是声明不匹配。
相关文章:
- variadic函数和折叠表达:试图在Visual Studio 2017中编译时致命误差
- variadic模板代码中的GCC VS MSVC编译误差
- 特征张量编译误差
- 在将迭代器与C 中的null进行比较时,编译误差
- C 类函数链拨打编译误差
- 从C中的结构中检索值时编译误差
- GCC与正弦和Boost的编译误差:间隔
- C 编译误差模板相关
- C 模板编译误差
- 模棱两可的方法编译误差
- C 模板用法:更改可变位置导致编译误差
- C 中带有读取函数的编译误差
- POCO编译误差找不到-lpocodatamysql
- 需要说明简单的C 程序中的编译误差,以演示超载函数
- Boost 1.65.1几何距离策略编译误差与Visual Studio 2017
- 使用参数化构造器时没有编译误差
- QT编译误差UNICODE/ULOC.H
- 使用交换方法在C 中使用交换方法时的编译误差
- C 使用Und und Binary Function对象的C 编译误差
- Turboc 的编译时间误差