C++相談室 part9

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:02/08/14 07:26
ヘボい事言ってみますけど、
friendは使わないほうがいいんでしょ?
goto並みっすか?
953デフォルトの名無しさん:02/08/14 07:28
directxをはじめようと思うのですがC++の基礎知識とかなくてもできますか?
C言語しかできないんですが。
>>953
いちおうC++でなくCからでも使えるようになっとるよ・・・・
>>952
iteratorを作るような時は、逆にfriendを積極的に使った方が、
publicメンバを減らせてカプセル化を強められるということもある。
要は使い方次第。
演算子のオーバライド辺りで、メンバ関数よりfriend関数にした方が良いパターンが
あったような気がするが……
ん―、思い出せん。
>>956
ああ、何を言いたいのか分かった。

class Hoge{
  int n_;
public:
  Hoge() : n_(0) {}
  Hoge(int i) : n_(i) {}
  friend Hoge operator +(const Hoge& lhs,const Hoge& rhs){
    return lhs.n_ + rhs.n_;
  }
};

Hoge a(3);
Hoge b(4);
Hoge c = a + b;
c = 3 + b;// friendなら通る。
c = a + 4;

ってなケースのことだな。
friendなら、暗黙の型変換をやってくれるからどれも通るけど、
friendにしてないと、通らないやつが出てくる、というお話。
>>957
うむ。3.operator+(b) という構文は許されないからねえ。
そろそろ新スレ立ててみるよ。ちょっと汚れてしまったから心機一転。
立てました。新スレ
「C++相談室 part10」
http://pc3.2ch.net/test/read.cgi/tech/1029315669/
次スレも立ったし埋めsage
埋めsage
std::cout << "埋めsage" << endl;
なかなか埋まらないsage
sage
sageろやゴルァ!!
967デフォルトの名無しさん:02/08/25 13:47
悩みに悩んでたんですが、
思い切って聞きますね。
UNLZA32.DLLの扱いについて
質問したいのですが、
どこのスレへいったらいいのでしょうか?
どこへいってもすれ違いと言われてしまいそうで
困りはてています。
ここでお聞きしてもいいのでしょうか?
>>967
そんなDLL初めて聞いた。何する奴?
969967:02/08/25 13:56
すみません、タイプミスしました。

UNLZA32.DLL

UNLHA32.DLL
でした。
http://www.ntus.net/nubak/manual/japanese/UNLHA32.TXT

これ見る限り, APIドキュメントも同梱されてるみたいだが…?
971967:02/08/25 14:08
>970
わざわざすみません、
一通りドキュメントには目を通したんですが、
どうにもわからなくて。。
ここで具体的に聞いていいですか?
>969
扱いといっても色々あって回答に困る。
 拾ってきたアプリ(用DLL)の使用方法が分からないの?
 自作アプリからDLLを使う方法が分からないの?
 権利面とかの扱いが分からないの?
>971
下記あたりをキーにGoogleで検索して見てください。
 DLL LHA 動的リンク
すぐに詳しく書いてあるページがヒットすると思う。
>>971
とりあえずここに詳しい解説があるよ。
http://www.hyuki.com/writing/techask.html
975967:02/08/25 14:32
ありがとうございます。
自分の症状書いてたので
レスに気付きませんでした。
とりあえず>974さんに教えていただいた
ところに解決策があることを期待して行って来ます。
それから聞いても遅くないですしね。、
ありがとうございました。
976967:02/08/25 17:30
>973
教えていただいた、キーワードでも
さわりくらいの解説しかヒットしませんでした。
>974
散々探したのですが
本当にこのURLであってますか?
サイト内検索でLHAと検索しても
ヒットしなかったんですが。。

とりあえず解説サイトはないとして、
心置きなく質問させてもらいますね。
でもちょっとタイミング悪いみたいなんで、
次スレ待ってます。
>>976
解説サイトはあるが、それが967の求めているかどうかがわからない、というだけ。
>>974をちゃんと読んで、自分が何を求めているのか、正しく提示せよ、ということ。
978デフォルトの名無しさん:02/08/25 19:53
C++ のテンプレートについての基本的な質問です。

- main.cc

#include<cstdio>

template <typename T> void func(T a);

int main(int argc,char *argv[]){
func('c');
}

-func.cc

template <typename T> void func(T a){
return;
}

の様に別ファイルにテンプレート関数を記述した時、コンパイルは通るのですが、リンクで以下のエラーメッセージが発生します。なぜなのでしょうか?

main.o: In function `main':
main.o(.text+0xc): undefined reference to `void func<char>(char)'
collect2: ld returned 1 exit status

コンパイラは、gcc version 2.95.3 を使用しています。
よろしくおねがいします。

それではfunc.ccをコンパイルするときには func<char> が必要かどうか
分らない。
>>978
export付けてないからでしょ。それと、exportキーワードをサポートしている
処理系はほとんどないから、分割コンパイルは難しいかも。
See C++ 3rd, C.13.10
982デフォルトの名無しさん:02/08/25 20:35
c++でウインドウを作るのってどうやるの?
どっかいいサイトあったら教えて
983またかよ、、:02/08/25 20:44
984デフォルトの名無しさん:02/08/25 21:05
回答をありがとうございます。

979> それではfunc.ccをコンパイルするときには func<char> が必要かどうか
979> 分らない。

とありますが、必要である事をコンパイラへ知らせるには、どのようにすれば良いのでしょうか?

980> export付けてないからでしょ。それと、exportキーワードをサポートしている
980> 処理系はほとんどないから、分割コンパイルは難しいかも。

export をサポートしていないコンパイラでは、どうやっても無理と言う事でしょうか? export をサポートしているコンパイラは、どの様な種類の物があるのでしょうか?

981> See C++ 3rd, C.13.10

これは、何ですか?

983> http://www.kumei.ne.jp/c_lang/index.html

C++ の文法について書かれたページですね。しかしここには、この問題の解決法は記述されていないようです。

983のリンクの Windows SDK編 第1部にウィンドウの作り方からあるよ。
986デフォルトの名無しさん:02/08/25 21:22
なるほど、983 は 982 に対する返答ですね。失礼しました。
>>984
>981> See C++ 3rd, C.13.10
>これは、何ですか?

See=見ろ
C++ 3rd=プログラミング言語C++ 第3版
C.13.10=付録Cの13(テンプレート)の10(明示的なインスタンス生成)
See → 眺める
Oppai → おっぱい
989デフォルトの名無しさん:02/08/26 05:04
なるほど、わかりました。 > 987

ファイル func.cc 内に、

template void func<char>(char);
template void func<int>(int);

を記述する事により、実際に使用する型各々のコンパイル結果がオブジェクトファイル内に生成される訳ですね。

どうもありがとうございました。
990デフォルトの名無しさん:02/08/26 17:51
990
991デフォルトの名無しさん:02/08/26 17:51
よーし、パパ1000取っちゃうぞー
992デフォルトの名無しさん:02/08/26 17:52
もうちょっと!
993デフォルトの名無しさん:02/08/26 17:52
993ゲット
994
やっと995か
996!
997だ!あとちょっと!念願の1000ゲットなるか!
998…すごい!
999SITNAM:02/08/26 18:00
 ∧⊂ヽ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (゚Д゚)ノ <  1000ゲット!
 (|  |   \__________
〜|  |
 ∪∪
1000SITNAM:02/08/26 18:00
やったー!1000打!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。