質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.60%

  • Xcode

    4000questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • C++

    3337questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

C++ エラーがたくさんでて困っています。。デバッグを助けてください。。

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 5,048

heihoo

score 61

以下のコードを書いたのですが思い通りに動きません。。

デバッグを教えてほしいです。。

#include <iostream>
#include <string.h>

using namespace std;

class Person {
public:
    Person();
    Person::Person(const char *str);
    Person::Person(const char *str, int yy, const char* pn);
    Person(const Person &psn);
    ~Person() {
        if (name != NULL) delete [] name; //メモリ解放
    }
    
    void init(const char *str, int yy,const char* pn);
    void SetName(const char *str);
    void SetAge(const int yy) { age = yy; }
    void SetPhonum(const char *pn) {strcpy(phonenum, pn);}
    const char *GetName() {return name;}
    int GetAge() {return age;}
    const char *GetPhoneNum() {return phonenum; }
private:
    char *name;
    int age;
    char phonenum[15];
};

void Person::init(const char *str, int yy, const char* pn) {
    name = new char[strlen(str) + 1];
    strcpy(name, str);
    age = yy;
    strcpy(phonenum, pn);
}

Person::Person() {
    name = NULL;
    age  = 0;
    phonenum[0] = '¥0';
}

Person::Person(const char *str) {
    init(str, 0, "");
}
Person::Person(const char *str, int yy, const char* pn) {
    init(str, yy, pn);
}

Person::Person(const Person &psn) {
    init(psn.name, psn.age, psn.phonenum);
}

void Person::SetNum(const char *str) {
    if (name != NULL) delete [] name;
    name = new char[strlen(str) + 1];
    strcpy(name, str);
}

int main(int argc, const char * argv[])
{
    Person Per("一太郎");
    Per.SetAge(20);
    Per.SetPhoneNum("012-1111-1111");
    
    Person Per2("二太郎", 25, "012-1212-2222");
    
    Person.Per3(Per2);
    Per3.SetName("三太郎");
    Per3.SetAge(30);
    
    Person *p[] = { &Per, &Per2, &Per3 };
    
    for (int i=0; i < 3; i++) {
        cout << "名前:" << p[i]->GetName() << "年齢:" << p[i]->GetAge() << "電話番号:" << p[i]->GetPhoneNum() << endl;
    }
    return 0;
}

宜しくお願いします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • cateye

    2016/01/23 19:50

    「思い通りに動きません」の詳細を教えてください。

    キャンセル

回答 3

0

思い通りに動かないって、このコードってコンパイル通らないですよね。。。
コンパイルエラーの内容を上から順番につぶしていけばコンパイルが通って動くようになるはずです。

ざっと見て3箇所おかしいところを見つけました。
(1)SetNumメソッドって何?
(2)単純な大文字と小文字のタイプミス
(3)main()関数内のスペースとピリオドの打ち間違え

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

下記にコードを記載してあります。自身の記述したコードと見比べてください。また、あくまでタイプミスなどを修正したものであり、動作を保障するものではありません。
xcodeは使用したことがありませんが、統合開発環境ならエラーの詳細とエラーが出ている行番号が記述されているかと思います。まずは1行ずつエラーを取り除くことからデバッグは始まります。
デバッグはプログラムの基本です。まずは御自身で一通り確認していただき、その上で困難な場合等に質問されるのがよいかと思います。
厳しい意見かと思われるかもしれませんが、それが面倒などならあまり向いていないかと思われます。

#include <iostream> 
#include <string.h> 

using namespace std; 

class Person { 
public: 
    Person();
    Person::Person(const char *str);
    Person::Person(const char *str, int yy, const char* pn); 
    Person(const Person &psn); 
    ~Person() { 
        if (name != NULL) delete [] name; //メモリ解放 
    } 
     
    void Init(const char *str, int yy,const char* pn); 
    void SetName(const char *str); 
    void SetAge(const int yy) { age = yy; } 
    void SetPhonNum(const char *pn) {strcpy(phonenum, pn);} 
    const char *GetName() {return name;} 
    int GetAge() {return age;} 
    const char *GetPhoneNum() {return phonenum; } 
private: 
    char *name; 
    int age; 
    char phonenum[15]; 
}; 

void Person::Init(const char *str, int yy, const char* pn) { 
    name = new char[strlen(str) + 1]; 
    strcpy(name, str); 
    age = yy; 
    strcpy(phonenum, pn); 
} 

Person::Person() { 
    name = NULL; 
    age  = 0; 
    phonenum[0] = '\0';
} 

Person::Person(const char *str) { 
    Init(str, 0, ""); 
} 
Person::Person(const char *str, int yy, const char* pn) { 
    Init(str, yy, pn); 
} 

Person::Person(const Person &psn) { 
    Init(psn.name, psn.age, psn.phonenum); 
} 

void Person::SetName(const char *str) { 
    if (name != NULL) delete [] name; 
    name = new char[strlen(str) + 1]; 
    strcpy(name, str); 
} 

int main(int argc, const char * argv[]) 
{ 
    Person per("一太郎"); 
    per.SetAge(20); 
    per.SetPhonNum("012-1111-1111"); 
     
    Person per2("二太郎", 25, "012-1212-2222"); 
     
    Person per3(per2); 
    per3.SetName("三太郎"); 
    per3.SetAge(30); 
     
    Person *p[] = { &per, &per2, &per3 }; 
     
    for (int i=0; i < 3; i++) { 
        cout << "名前:" << p[i]->GetName() << "年齢:" << p[i]->GetAge() << "電話番号:" << p[i]->GetPhoneNum() << endl; 
    } 
    return 0; 
} 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

修正点の解説

修正内容

  1. extra qualification ‘Person::’
        「extra qualification」とは、余分な形容 なので 以下の修正
    修正前    Person::Person(const char *str); 
    修正後    Person(const char *str);

  2.  error: extra qualification ‘Person::’
        1と同じ
    修正前    Person::Person(const char *str, int yy, const char* pn);
    修正後    Person(const char *str, int yy, const char* pn);

  3. error: no ‘void Person::SetNum(const char*)’ member function declared in class ‘Person’
        SetNumメンバーが宣言されていない
    修正前    void Person::SetNum(const char *str) {     
    修正後    void Person::SetName(const char *str) {     

  4. error: ‘class Person’ has no member named ‘SetPhoneNum’
        SetPhoneNumメンバがクラスPersonに存在しない。
    修正前   void SetPhonum(const char *pn) {strcpy(phonenum, pn);} 
    修正後   void SetPhoneNum(const char *pn) {strcpy(phonenum, pn);} 

  5. error: expected unqualified-id before ‘.’ token
         Person.Per3(Per2);

修正前   
修正後   Person(const Person &psn); 

Person::Person(const Person &psn) { 
    init(psn.name, psn.age, psn.phonenum); 

参考文献
http://yshibata.blog.so-net.ne.jp/2007-10-18

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    C言語 式の構文エラー 内容について

    複数の単語からなる文を入力し,各単語の先頭文字を大文字に変えて表示させる というプログラムを作っているのですが、コンパイル時に ------ Borland C++ 5.5.1 f

  • 受付中

    C言語 文字列の入力についての質問です

    C言語の文字列入力について質問です。 例えば、 homy tomi sami tani sai tom rari rare tara 等の不定個の名前が2行にわたってあるとし

  • 解決済

    【C言語】スタックをリストで実現するプログラム

    毎度お世話になっております。 高橋麻奈さんの「やさしいC アルゴリズム」をみて勉強しているのですが、リストを使ったスタックのコードで、がコンパイルエラーになってしまいました。 コ

  • 解決済

    参照型?ポインタ?

    関数の引数が書きなのですが、 通常のポインタや参照型と何が違うのでしょうか? , char*& strResult,

  • 解決済

    unique_ptrで確保した領域を外部関数へ渡す方法をご教授お願いします

     unique_ptrを以下のような外部関数へ直接渡す方法を知りたいです。 unique_ptr型から生ポインタを引数としている関数を呼び出したかったのですが、getメソッドを使

  • 解決済

    char型の配列変数にchar型の変数を代入したい

    使用言語 C 環境 Visual Studio 2017 初めての質問です。 独学でプログラミングを始めたのですがわからないところがあり困っています。 char型の配列変数の使い方

  • 受付中

    c言語 文字列を逆順にして出力する

    発生している問題・エラーメッセージ 文字列を逆順にする関数を作成したのですが最後の文字の入れ替えができません。少しいじるとコアダンプと出てしまいます。どなたか解決法を教えてください

  • 解決済

    配列を返す関数を作りたい[VC++][VS2008]

    前提・実現したいこと 配列を返す関数を作りたい。 戻り値に配列の長さ、引数にポインタをもつ関数で配列の値が取得できるようにしたい。 具体的には、ポインタ引数を関数内でnewし、me

同じタグがついた質問を見る

  • Xcode

    4000questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • C++

    3337questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。