2013-02-08 13 views
0

我有一段時間想弄清楚下一步該做什麼。基本上,這個程序不能使用指針變量(*)和動態分配的內存(例如「int * variable = new int」)以外的任何其他內容。我必須在其他方面創建一個結構!使用指針成員變量將數據輸入到結構體中

我已經在下面包含了一些代碼。在我的所有cin「>>」操作符下面都有紅線,並且顯示「錯誤:無操作符」>>「與這些操作數匹配」的消息。代碼(最後一行)的「one.score2」部分中的「one」下方還有一條紅線,並且會顯示一條消息,指出「錯誤:表達式必須具有整數或非範圍的枚舉類型」。

如何讓我的代碼正常工作?

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

// Define structures 
struct student 
{ 
    string *name; 
    double *score, *score2, *average; 
}; 

void main(void) 
{ 
    // Create our students 
    student one, two; 

    cout << "Enter the first student's name: "; 
    cin >> one.name; 
    cout << endl << "Enter " << one.name << "'s first exam: "; 
    cin >> one.score; 
    cout << endl << "Enter " << one.name << "'s second exam: "; 
    cin >> one.score2; 
    one.average = ((one.score + one.score2)/2); 
+1

爲什麼你要把這些成員作爲結構中的指針?這聽起來像是一個人爲的家庭作業。 –

+2

你已經回答了你自己的問題:「int * variable = new int」 - 你的代碼在哪裏?實際上你應該創建一個字符串,並在你嘗試讀取某些東西之前,爲一個和兩個加倍。 –

+0

要修復程序,您需要查看:構造函數,析構函數,動態內存分配和指針解引用。 –

回答

1

您需要使用運算符*來取消引用指針。也就是說,

cout << "Enter the first student's name: "; 
cin >> *one.name; 
cout << endl << "Enter " << *one.name << "'s first exam: "; 
cin >> *one.score; 
cout << endl << "Enter " << *one.name << "'s second exam: "; 
cin >> *one.score2; 
*one.average = ((*one.score + *one.score2)/2); 

但是,你需要記住那些指針第一分配內存。

1

只要改變你的結構如下

struct student 
{ 
    string name; 
    double score, score2, average; 
}; 

按照您的例子,他們並不需要爲指針,如約阿希姆Pileborg也出來。

0

像score這樣的成員是指向實際數據的指針。例如。 one.score是一個指向double的指針。當你想CIN的雙重你應該至少derefer指針:

cin >> *one.score 

在你的main()如你錯過了分配數據實例。

one.score = new int; 
cin >> *one.score 

最好的方法是避免指針訪問數據,並讓學生的數據成員。

相關問題