- - PR -
ライブラリ定義の定数について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-07-13 18:27
こんにちわ
自分で作成したライブラリを組み込んだプログラムで ライブラリで定義されている定数と同一名の変数を定義してしまいました。 この場合、変数の値が優先されてしまうようです。 定義されている定数値は無視されてしまいます。 たとえば ライブラリでabc=1という定数を定義をして、 ソース上でdim abc as shortと定義した場合 変数abcに代入された値が優先され abc=10と代入するとabcは10になります vblfのようなVB定義の定数も同様のようです。 二重定義のエラーのような物は出せないのでしょうか? ご存知のかたいらしたら教えてください。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2004-07-13 18:28
名前空間
これじゃわかりづらいか。 1つのファイルに、次のように定義する。
さて、どうなるでしょう? ↓↓一郎さん:フォローどうも [ メッセージ編集済み 編集者: Jitta 編集日時 2004-07-14 08:28 ] | ||||||||||||
|
投稿日時: 2004-07-13 18:56
Namespaceの下に変数は置けないのでは。
やるならこうかな。
| ||||||||||||
|
投稿日時: 2004-07-13 20:26
基本的に同名の識別子は、内側のものが優先されるようになっているので、多分エラーにするようなことはできないでしょう。 包含する型が別物である場合や、ローカルに定義した変数などは、たとえアクセスするための記述が同じになる名称のものでも、外側で定義されたものとは衝突しないので… | ||||||||||||
|
投稿日時: 2004-07-13 21:19
さすがに、完全一致すると警告(CS1595)がでます。
リファレンス順序の先の定義を採用するようですが、 IDE上だとあまり意識しないですね。 プロジェクトの追加順かしら。 _________________ | ||||||||||||
|
投稿日時: 2004-07-14 11:25
みなさん、ありがとうございます。
私が作ったライブラリを使ってる人から動かないという指摘を受けて 調べてみたら、ライブラリ定義の定数と同名の変数が定義されており 定数の値が参照されていなかったということがあったので。 当たり前の話ですが、同名の変数と定数はソース上には定義できません。 これと、同じことが出来ればと思ってるんですが。 あみゅせるさんへ
具体的にどういったときに出るのか教えていただけるとありがたいです。 | ||||||||||||
|
投稿日時: 2004-07-14 12:40
おじかさん、こんにちは。
調べてませんので、出来るか出来ないかは判りません。 解決策としては Imports ステートメント(using ディレクティブ)を使用しないようにしてもらうか(現実的でないかも)、エイリアスを使う(こっちの方がスマート)ようにしてもらうかの、どちらかではないでしょうか。
ですから、名前空間も含めて完全に一致した場合、じゃないですか? | ||||||||||||
|
投稿日時: 2004-07-14 15:59
こんにちは。
ちょっとニュアンスが離れてたみたいです。 あるライブラリの中身が、
でこれを参照したプロジェクトから
なんてことをすると「Hoge.foo.abc」どころか 「Hoge.foo」の定義時点で怒られます。 但し、VBではソースに見えないところで ルート名前空間なるプロジェクト名を名前空間の初期値に 設定するので、何もしないと ライブラリ名.Hoge.foo.abc アプリ名.Hoge.foo.abc と、競合を避けてしまいます。 _________________ |