2017-03-16 9 views
-2

配列に関する私のコンストラクタに問題があります!私のヘッダファイルでコンストラクタの配列

は私が得たこの(簡体字):

class Student 
    { 
     private: 
       int am; 
       char name[] ; 
       int grades[8]; 
    } 

そして、私のcppファイル内

この:

#include<iostream> 
#include<cstdlib> 
#include "Student.h" 
using namespace std; 

Student::Student() 
{ 
} 

Student::Student(int am , char name,int grades) 
{ 
    this->am=am; 
    this->name=name; 
    this->grades=grades; 
} 

そして、私はこのエラー

[エラー]を取得しています'char *'を 'char [0]'に割り当てる際の互換性のない型

P.S:すでにこのサイトの回答を検索しましたが、私はC++の新機能であり、それを把握できませんでした。

+4

文字列を扱う場合は、実際には 'std :: string'を使用してください。 – NathanOliver

+0

パラメータは 'char name'と宣言していることに注意してください。これはただの文字です。 –

+0

'char'は1文字です。あなたの生徒は本当に名前に一人のキャラクターしか持っていませんか? – Barmar

答えて

0

あなたは何をしているのかは明らかです。 uが

char name[20]; 

のような名前を定義しなければならないか、のようなあなたのコンストラクタでそれのためにメモリを割り当てる必要があります:あなたは動的にメモリを割り当てる場合、

0

ある変数の値を別の変数に割り当てるときは、その型が互換性があることが重要です。エラーメッセージは、互換性のない割り当てを試みていることを伝えています。問題を理解するには、変数の宣言をよく見てください。クラスメンバーは

char name[] ; 

として宣言されているが、コンストラクタへのパラメータは、最初のものが配列であるが、第1文字であることを

char name 

注として宣言されます。あなたが別の配列を割り当てることはできませんので、しかし、今あなたが別のエラーを取得します

char name[] 

:現在のエラーを修正する一つの方法は、メンバーフィールドに一致するようにパラメータ宣言を変更することです。代わりに、各文字を一度に1つずつコピーする必要があります。これと他の合併症を避けるため、char[]の代わりにstd::stringを使用することを強くお勧めします。

0

はありがとうそれを削除することを忘れないでください

name = new char [20]; 

速い返事のために、私はそれを理解した!

関連する問題