これは私の最初の投稿であり、このコミュニティに感謝し始めたいと思います。 、皆さんは素晴らしいです:)オブジェクトを持つ配列を使用してクラス内のメソッドを呼び出すと、エラー "非クラス型"、C++
残念ながら、私はこの特定の質問に対する答えは見つかりませんでした。私は自分で問題を解決しましたが、私のコードがどのように、なぜ私のコードが動作するのかを理解していません。
この投稿は私と同じ問題を抱え、解決策を探しているすべての人のためのものです。しかし、解決策がなぜ機能するのか分からないので、それはまた質問です。だから、ほとんどが、私は学ぶことに興味を持ってどのように、なぜそれが私が将来:)だから、
の私のコードでそれを実装することができますので、動作しますが、これは私のコードです:
#include <iostream>
#include <cstdlib>
using namespace std;
const int number=4;
class Person
{
public:
string name;
int age;
void setInfo(string _name, int _age)
{
name=_name;
age=_age;
}
void Print(Person* family, int number) //This is the method I had a problem with
{
for (int i=0; i<number; i++)
{
cout<<family[i].name<<" is "<<family[i].age<<" years old"<<endl;
}
}
};
int main()
{
Person family[number]; //Creating an array/vector to put my objects in
for (int i=0; i<number; i++) //The user creates people for a family of 4
{
string name;
int age;
cout<<"Name on person number "<<i+1<<": ";
getline(cin,name);
cout<<"How old is the person: ";
cin>>age;
cout<<endl;
cin.get();
family[i].setInfo(name, age); //Here I am using a . and it works just fine
}
family->Print(family, number); //Works!
//family.Print(family, number); This does not work.
//Errormessage: request for member 'Print' in 'family', which is of
//non-class type 'Person [4]'
return 0;
}
私のコードは非常に簡単ですが、私が苦労しているのは、その方法を働かせることを求めることでした。
私の質問、および私が学びたいものは、です。
なぜですか?動作しませんが、 - >はしますか? - >をいつ使うのですか?私はそれを以前に使ったことはありませんし、私のコースブックでそれを読んだこともありません。私の本には、単一のオブジェクトから呼び出されるメソッドの例だけがあり、それからobject.method()が使用されます。
別の言葉で言えば、なぜfamily [i] .setInfo(name、age)ですか;仕事はしていますが家族はありません。プリント(家族、番号); ?この特定のケースで - >を使用する必要があるのはなぜですか?非クラス型である「家族」のメンバー「印刷」の要求、「人[4]」(それはどういう意味?)
あなたの答えを読んで楽しみ:
私が手にErrorMessageがありますC++についてもう少し学ぶために:
ありがとう!
編集: は、以下のいくつかの良い答えを得たが、私も説明このビデオ見つけ - >演算子:
https://thenewboston.com/videos.php?cat=16&video=17518
そして、この(クラスへの章ポインタを):
http://www.cplusplus.com/doc/tutorial/classes/
さらに、配列をもう少し理解するために、このリンク(Alan Stokesのコメントに掲載)をご覧ください。
0家族は配列で、配列名はその最初の要素へのポインタとして機能するため
'family'が配列で、配列名がintの最初の要素へのポインタであるからです。だから基本的に 'family-> setInfo()'は '(&family [0]) - > setinfo()'と同じです。 – coredump
'std :: vector'を使う方がずっと良いでしょう。シャープなエッジが少なくなります。 –