1. ホーム
  2. c++

[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。

2022-01-20 14:47:04

質問

stackoverflowのお役立ちコミュニティの皆様。

構造体でポインタを使うプログラムは初めてで、いろいろ調べてみたのですが、探しているものが見つかりませんでした。すでに回答されているようでしたらご容赦ください。

私は学校のプロジェクトで、データを格納するためにポインタ配列を使用するよりも構造体を定義する必要があります。このループでは、私は次のエラーが発生します。

式はポインタからオブジェクトへの型を持っている必要があります。

for (int i = 0; i < nbClerk; i++)
            {
                cout<<"Number of hours: ";
                cin>>c_info->hoursWorked[i];
            }
            break;

以下はコードの全体です。

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

//structure defining Employee
struct Employee
{
    int hoursWorked;
    int hourRate;
    double overtime;
    string name;
    int empID;
};

//Function collecting and calculating info
void employeeInfo(int nbOperator, int nbClerk){

    char classOfEmployee;

    Employee *c_info;
    c_info = new (nothrow) Employee[nbClerk];

    Employee *o_info;
    o_info = new (nothrow) Employee[nbOperator];

    cout<<"Select the class of employee (C=Clerk, O=Operator)";
    cin>>classOfEmployee;

    switch (tolower(classOfEmployee))
    {
    case 'c': 
        for (int i = 0; i < nbClerk; i++)
        {
            cout<<"Number of hours: ";
            cin>>c_info->hoursWorked[i];
        }
        break;
    }
}

int main(){
    int nb1,nb2;
    cout<<"Nb Employee and nb of nb of operator: ";
    cin>>nb1>>nb2;
    nbEmployee(nb1, nb2);
    system("pause");
}

解決方法は?

という意味でしょう。

c_info[i].hoursWorked;

から c_info は配列であるため c_info[i] にアクセスすることになります。 i -の第 1 インスタンス (オブジェクト) です。 Employee のクラスは c_info を配列で取得し、さらに hoursWorked を通して . 演算子を使用します。

これで、この変形が単に意味をなさないことがよくわかるでしょう。 hoursWorked は単なる積分型であり、配列ではないので [] 演算子を使用します。