私はいくつかの異なるフォーラムで試してみましたが、直接的な答えを得ることができないようですが、この関数が構造体を返すようにするにはどうすればよいですか? 「return newStudent;」を試してみるとエラー「studentTypeからstudentTypeへの適切なユーザー定義の変換が存在しません。」が表示されます。
// Input function
studentType newStudent()
{
struct studentType
{
string studentID;
string firstName;
string lastName;
string subjectName;
string courseGrade;
int arrayMarks[4];
double avgMarks;
} newStudent;
cout << "\nPlease enter student information:\n";
cout << "\nFirst Name: ";
cin >> newStudent.firstName;
cout << "\nLast Name: ";
cin >> newStudent.lastName;
cout << "\nStudent ID: ";
cin >> newStudent.studentID;
cout << "\nSubject Name: ";
cin >> newStudent.subjectName;
for (int i = 0; i < NO_OF_TEST; i++)
{ cout << "\nTest " << i+1 << " mark: ";
cin >> newStudent.arrayMarks[i];
}
newStudent.avgMarks = calculate_avg(newStudent.arrayMarks,NO_OF_TEST );
newStudent.courseGrade = calculate_grade (newStudent.avgMarks);
}
ISO C++に基づいており、G ++で適切に動作するコードの編集バージョンを以下に示します。
#include <string.h>
#include <iostream>
using namespace std;
#define NO_OF_TEST 1
struct studentType {
string studentID;
string firstName;
string lastName;
string subjectName;
string courseGrade;
int arrayMarks[4];
double avgMarks;
};
studentType input() {
studentType newStudent;
cout << "\nPlease enter student information:\n";
cout << "\nFirst Name: ";
cin >> newStudent.firstName;
cout << "\nLast Name: ";
cin >> newStudent.lastName;
cout << "\nStudent ID: ";
cin >> newStudent.studentID;
cout << "\nSubject Name: ";
cin >> newStudent.subjectName;
for (int i = 0; i < NO_OF_TEST; i++) {
cout << "\nTest " << i+1 << " mark: ";
cin >> newStudent.arrayMarks[i];
}
return newStudent;
}
int main() {
studentType s;
s = input();
cout <<"\n========"<< endl << "Collected the details of "
<< s.firstName << endl;
return 0;
}
スコープに問題があります。関数内ではなく、関数の前に構造体を定義します。
studentType newStudent() // studentType doesn't exist here
{
struct studentType // it only exists within the function
{
string studentID;
string firstName;
string lastName;
string subjectName;
string courseGrade;
int arrayMarks[4];
double avgMarks;
} newStudent;
...
関数の外側に移動します。
struct studentType
{
string studentID;
string firstName;
string lastName;
string subjectName;
string courseGrade;
int arrayMarks[4];
double avgMarks;
};
studentType newStudent()
{
studentType newStudent
...
return newStudent;
}
他の人が指摘したように、関数の外でstudentTypeを定義します。もう1つ、それを行ったとしても、関数内にローカルのstudentTypeインスタンスを作成しないでください。インスタンスは関数スタック上にあり、返そうとすると使用できなくなります。ただし、できることの1つは、studentTypeを動的に作成し、関数へのポインタを返すことです。