どうも俺です
ようやくクラスを使えるようになったと思いきや
やはりあの御方が僕を裏切ってくださいました
それは
愛しのポインタちゃん・・・
もうさー
ほんとツンデレ
割りとなかよくなったかな?とか思ってると
またもセグメントちゃんをバイオレーションしてくれる
素敵な子です
助けて大石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がアドレスが入る・・から・・えーと
んじゃそのポインタをどうすれば・・・いい・・・の
だめじゃあああああああああああ
勉強不足じゃあああああああああ
あふん
ようやくクラスを使えるようになったと思いきや
やはりあの御方が僕を裏切ってくださいました
それは
愛しのポインタちゃん・・・
もうさー
ほんとツンデレ
割りとなかよくなったかな?とか思ってると
またもセグメントちゃんをバイオレーションしてくれる
素敵な子です
助けて大石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がアドレスが入る・・から・・えーと
んじゃそのポインタをどうすれば・・・いい・・・の
だめじゃあああああああああああ
勉強不足じゃあああああああああ
あふん