嗨朋友在我的c ++程序中。我传递的结构数组功能,但在其中得到错误。请有人帮忙吗。程序中有以下错误。
1.需要恒定表达。 2.非法结构运作。 3.声明语法错误。
#include<iostream.h>
#include<conio.h>
void calc_price(struct c_items);
struct c_items
{
float name[80];
int quantity;
int price;
};
int main(void)
{
int num_items=3;
c_items obj[num_items]
calc_price(obj,num_items);
getch();
return 0;
}
void calc_price(c_items obj[],int num_items)
{
int i,n,total=0;
cout<<"Enter number of items = ";
cin>>n;
for(i=1;i<=num_items;i++)
{
cout<<"Enter name of item"<<i<<" = ";
cin>>obj[i].name;
cout<<endl<<"Enter price of item"<<i<<" = ";
cin>>obj[i].price;
cout<<endl<<"Enter quantity of item"<<i<<" = ";
cin>>obj[i].quantity;
}
cout<<endl<<endl<<"Retail value of inventory ";
for(i=1;i<=5;i++)
{
cout<<endl<<obj[i].name<<i<<" "<<obj[i].price<<"$";
total=total+obj[i].price;
}
cout<<"Total retail value = "<<total<<"$";
}
答案 0 :(得分:2)
在C ++和C数组中,通过地址(指针)而不是值传递。这有副作用,即接收函数不知道数组有多大,即使你对参数进行整形来告诉它。
C ++继承了一个名为&#34; array-pointer equivalence&#34;来自C,这意味着你可以写
struct foo;
void fn(foo f[25]);
但那只是语法糖。编译器实际上认为你写道:
void fn(foo * f);
(你会看到有些人写foo* f
,有些人写foo *f
,有些人写foo f[]
;他们的意思与上面的行相同)
这是一个简单,完整的传递结构数组的示例(实时演示http://ideone.com/qc4t53)
#include <cstddef>
struct Foo
{
int m_i; // 'm_' to distinguish a member variable.
};
int structFunc(Foo* foos, size_t numFoos);
int main()
{
const size_t NumFoos = 10;
Foo mainFoos[NumFoos];
int i = structFunc(mainFoos, NumFoos);
return 0;
}
int structFunc(Foo* foos, size_t numFoos)
{
int retVal = 0;
for (size_t i = 0; i < numFoos; ++i) {
foos[i].m_i = i;
++retVal;
}
return retVal;
}
有关数组指针等效性的更多内容,来自C FAQ
答案 1 :(得分:0)
main
的第二行应为struct c_items obj[num_items];
宣言无效calc_price(struct c_items);
与定义/实施void calc_price(c_items obj[],int num_items)
答案 2 :(得分:0)
您有五个问题阻止编译代码:
float name[
应该是char name[
,否则operator>>
未定义; void calc_price(struct c_items);
应成为void calc_price(c_items obj[],int num_items);
c_items
的前向声明。除此之外,还有许多不同的问题,其中最重要的问题是:您必须在calc_price
中检查cin
- n
是否大于num_items
{{1}}
答案 3 :(得分:0)
应该是:
#include <iostream>
#include <string>
using namespace std; // if you must
struct c_items
{
std::string name;
int quantity;
int price;
};
void calc_price( c_items obj[], int num_items );
int main()
{
const int num_items = 3;
c_items obj[num_items];
calc_price( obj, num_items );
return 0;
}
void calc_price( c_items obj[], int num_items )
{
// etc.
在calc_price
函数中,您需要更加小心数组索引。有效索引为0
到num_items - 1
,而不是1
到num_items
。 5
超出此范围。