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

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

ただいまの
回答率

89.10%

structとクラスの違い

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 974

reotantan

score 257

Dogクラスには2つメンバーを与えました。
下二つ(参照とポインタ)がundefined reference to `Dog::ptrfunc(Dog const*)'
とエラーが出ています。
元々の例はstructだったのを、クラスにして書き換えたのですが誤りを見つけられません。
Dog doggy(150,"tilly");
doggy.valfunc(doggy);
doggy.ptrfunc(&doggy);
doggy.reffunc(doggy);



header
コード
/*
 * Dog.cpp
 *
 *  Created on: 2015/11/16
 *      Author: 礼央
 */
#include<iostream>
#include<string>
#include"Dog.h"
using namespace std;

Dog::Dog(int color,string owner){
    this->color=color;
    this->owner=owner;
}
void Dog::valfunc(Dog v1){
cout<<v1.color<<endl;
cout<<v1.owner<<endl;
}


void ptrfunc(const Dog *p1){
cout<<p1->color<<endl;
cout<<p1->owner<<endl;
}
void reffunc(const Dog &r1){
cout<<r1.color<<endl;
cout<<r1.owner<<endl;
}
Dog::~Dog(){
cout<<"deconst"<<endl;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+5

C++では、structclassの大きな違いが1つありまして、「structはデフォルトでメンバがpublicclassprivate」ということです。何も書いていないとメンバアクセスの状態がstructclassで切り替わってしまいます。

なお、それ以外の機能はstructclassでほとんど変わらず、structにメンバ関数をつけたり、structを継承ツリーに入れたりということも可能です。


投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/11/17 09:11

    header fileではすべてpublicにしてるのですが、(実用的ではないが、試すために)
    ポインター関数と参照関数を使うとエラーがでてしまいます
    どのようにエラーを修正できますか

    キャンセル

  • 2015/11/17 09:23

    ptrfuncとvalfuncはメンバでない「ただの関数」なので、「doggy.ptrfunc()」のようにオブジェクトから呼び出すことはできません。

    キャンセル

  • 2015/11/17 09:29

    すっかり書き忘れていました、ご指摘ありがとうございます

    キャンセル

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

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