それは今言わんでもええわな

おっぱいは赤ちゃんの為にあるんやで
管理人 とわ

相変わらず僕を苦しめるポインタさん

2008-06-21 | 小鳥のさえずり
どうも俺です

ようやくクラスを使えるようになったと思いきや
やはりあの御方が僕を裏切ってくださいました

それは




愛しのポインタちゃん・・・




もうさー
ほんとツンデレ
割りとなかよくなったかな?とか思ってると
またもセグメントちゃんをバイオレーションしてくれる
素敵な子です

助けて大石s


------------------------------>

とまあ書きかけで昨日悩んでたわけですが
解決しました

ソースの問題ではなくOSの問題だった
アクセスするデバイスのスペシャルファイル
/dev以下にログインしてるユーザーの権限がなかったようだ

chgrpでグループ追加してやってchmod g+wxで書き込み実行権限追加
してやると普通に動いた(write権限だけだったかも

俺の中ではセグメントバーオレーションは
各変数が保持しているメモリ領域(つまり各セグメントと呼んでいいのだろうか)
をこえてロードやライトしようとすると
「触っちゃらめええええ!壊れちゃうよおおお(メモリ的な意味で」
とコンパイラちゃんに言われるのが
まさにそれだと思ってたけど、一概にそうともいえないのかな


いや判らないっすよ


そもそも今書いてるソースが
シリアルポートからデバイスを制御する奴なんすけど
その肝心のシリアルポートのアクセス制御の関数は別の人が書いた
Cソースを使っているというていたらく


まぁそんなんはいいんです


ただ、そこのシリアルセッティングは
ほとんどのデバイスで同じ関数しか使わないので
そのセッティング専用の関数をメンバに持ち
ついでに時間情報を返す関数もいっしょにメンバに持つ
クラスを作って、各デバイスのクラスに継承してやる
のが一番いいのかなと思っているんだけど
今いちよく判らない

きっと読んでる方もわかり難いので
例として簡単に書いてみると


・serial.c(h)が
set_port();
set_speed();
set_rate();

以上の関数を定義(宣言)してますよと。
そんで各デバイスだが、まぁ判りやすく
N山さんと俺がシリアルで制御できたとする
(肛門にシリアルポートがあるとでも思えばいいよ

class Nyama{
private:
SERIAL *sp; //serial.cによる型で定義されるポインタ
void port_setting(){
sp=set_port("/dev/ttyS0");
set_speed(sp,1000);
set_rate(sp,10);
}
public:
unko(){
port_setting();
cout << "Unko^^";
}
};


class Towa{
private:
SERIAL *sp; //同上
void port_setting(){
sp=set_port("/dev/ttyS1");
set_speed(sp,1000);
set_rate(sp,10);
}
public:
jibaku(){
port_setting();
cout << "jibaku^^";
}
};


てな感じとするとしますよ。
(関係ない記述を省略したので判りにくくてスマソ
当然シリアルで制御するのだから
serial.cで定義される関数set_port~やらを二人共使う。
つまりここをまとめたい。
port_settingをまとめたいわけですよ。
だから、こんな感じのスーパークラスを作ればいいのかなと。

class Set_port{
private:
SERIAL *sp;
int speed,rate;
char *port;
public:
void setting(int speed,int rate,char *port){
sp=set_port(port);
set_speed(sp,speed);
set_rate(sp,rate);
return *sp; //何かが・・・違う
}
};

そしてサブクラスを


class Nyama :public Set_port
{
SERIAL *sp;
public:
unko();
};

class Towa :public Set_port
{
SERIAL *sp;
public:
jibaku();
};

そんでmainで・・・

int main()
{
Nyama yama;
towa ore;


・・・・あっダメだ判らなくなってきた
ポインタspをサブクラスでどう扱うべきか

スーパークラスの関数を使って*spがアドレスが入る・・から・・えーと
んじゃそのポインタをどうすれば・・・いい・・・の



だめじゃあああああああああああ
勉強不足じゃあああああああああ

あふん