将结构数组传递给c ++中的函数并获取错误

时间:2014-04-10 04:45:29

标签: c++ function struct

嗨朋友在我的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<<"$";
}

4 个答案:

答案 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)

您有五个问题阻止编译代码:

  1. float name[应该是char name[,否则operator>>未定义;
  2. 你错过了一个“;”在主;
  3. main中的num_items必须是const(因为你用它来告诉编译器一个数组有多长);
  4. 没有(有效)函数calc_price的前向声明(即void calc_price(struct c_items);应成为void calc_price(c_items obj[],int num_items);
  5. 当您在第3行首次提及时,没有结构c_items的前向声明。
  6. 除此之外,还有许多不同的问题,其中最重要的问题是:您必须在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函数中,您需要更加小心数组索引。有效索引为0num_items - 1,而不是1num_items5超出此范围。