【问题标题】:C++ errors when structures not resolved as type, and scope issues结构未解析为类型和范围问题时的 C++ 错误
【发布时间】:2015-10-12 00:14:52
【问题描述】:

我是 C++ 新手,并且对编译器似乎吐出我使用结构数组的尝试感到困惑。

在下面的程序中,编译器说无法将 Salesman 解析为类型。并且它没有在范围内声明。此外,编译器声称 struct Salesman 没有某些成员,例如 sales 或 comms,但它显然有。

    #include <iostream>
    #include <iomanip>
    #include <sstream>
    using namespace std;

    double all_sales;
    double all_coms;
    Salesman salesmen[100];
    final int MAX_MONTH = 2;

    void calc_comp_total(int emp){
        for(int i=1;i<=emp;i++){
            all_sales+=salesmen[i].ytosales;
            all_coms+=salesmen[i].ytocom;

        }
    }

    struct Salesman{

        double sales[MAX_MONTH] ={ };
        double comms[MAX_MONTH] ={ };
        string name;
        double ytosales =0;
        double ytocom =0;

    }
    void calc_personal_totals(Salesman s){
        for(int i=0;i<2;i++)
        {
            s.ytosales += s.sales[i];
            s.ytocom += s.comms[i];
        }
    }

    void store_sales(double sal, double com, int m, Salesman s, string nam){

        s.sales[m] = sal;
        s.comms[m] = com;
        s.name=nam;
    }
    double calculate_commission(double sales){

        if (sales>=5000 && sales<10000)
            return sales*0.1;
        else if(sales>=10000&&sales<18000)
            return sales*0.15;
        else if(sales>=18000)
            return sales*0.22;
        else if(sales<5000)
    return  0;
    }

    main(){

        bool again = true;
        int empl = 0;


        while(again){


            string n;
            double in_sales;

            cout<<"Enter employee name. n for next";
            cin>>n ;
            if(n=="n")
                bool again = false;
            else{


            for(int i=1; i<MAX_MONTH; i++){
                cout<<"Enter month"<< i << " sales";
                cin>>in_sales;

                store_sales( in_sales, calculate_commission(in_sales), i-1,                    salesmen[empl],n);
        }

            calc_personal_totals(salesmen[empl]);
            empl++;

            }
                calc_comp_total(empl);
                cout<<"\n Sales input is complete"

                }

                for(int i=0;i<empl;i++){
                    cout<<"\n "<< salesmen[i].name<<": "<<endl;
                    for(int j=0;j<MAX_MONTH;j++){
                            cout<<"\n $"<<salesmen[i].sales[j]<<" sales"<<" $"
                        <<salesmen[i].comms[j]<<" commission"<<endl;
                }

            cout<<"\n Yearly totals: $"<<salesmen[i].ytosales<<" sales,"<<"         $"<<salesmen[i].ytocom<<
                    "commissions"<<endl;
        }

        cout<<"Company totals: $"<<all_sales<<" sales"<< " $ "        <<all_coms<<endl;

    }

艾米,我把结构声明放在了错误的地方?我应该把一些东西移到主要语句中吗?来自 Java 背景,我遇到了很多我不习惯的问题。预先感谢您的帮助。

【问题讨论】:

  • "下面的程序" -- 什么程序? (您似乎遗漏了部分问题...)
  • 销售员的定义应该在任何使用它之前(你定义销售员数组之前定义struct Salesman
  • final int MAX_MONTH = 2; const 吗?

标签: c++ struct scope


【解决方案1】:

calc_comp_total 的数组声明和定义中,Salesman 尚未定义,也未声明。

简单的解决方法是将Salesman 的定义移到这些构造之上。但是,您最好在头文件中定义它,然后将其包含在您的实现文件中。

【讨论】:

  • 我明白你的意思,但我还不熟悉头文件。但我有一个快速的问题。在 C++ 中,main() 方法之外的声明顺序是否重要?所以你告诉我的是,因为 Salesman 结构是在 calc_comp_total 方法下面定义的,所以它不知道 salesman 是什么?我记得在 Java 中顺序无关紧要。另外,我想知道。如果你想声明两个结构(或函数),并且每个结构都包含对彼此结构类型的引用,会发生什么?那么哪一个会高于另一个呢?非常感谢!
  • 顺序在 C++ 中很重要。如果您有循环引用,则需要使用前向声明。我建议选择一个好的introductory C++ book
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2021-11-25
  • 2012-04-15
  • 1970-01-01
相关资源
最近更新 更多