NET 2003 C++ のマネージとアンマネージに関する質問です。
「__gc class」から、「__nogc class」の中に作った、「__nogc struct」構造体を使用しようとすると、「error LNK2020: 未解決のトークン」といったエラーになってしまい、
ビルドができません。
構造体を持つクラスの指定を「__gc class」に指定すると、ビルドが通るようになります。
これはどういった理由なのでしょうか?
マネージクラスから、アンマネージクラスの構造体は利用できないのでしょうか?
利用できるように改善する方法がございましたら、お教えいただけますと幸いです。
何卒よろしくお願いします。
No.5ベストアンサー
- 回答日時:
>B.hに、、__nogc struct Cの構造体の変数 *をstaticで宣言していたのですが、
>このstaticを外したところ、コンパイルが通りました。
クラスCのメンバ変数に struct Cのポインタ変数をもっていたということでしょうか。staticなメンバはコンストラクタの引数リストでなくグローバルな部分で初期化しなくてはならないのでそれが抜けていたのですかね。staticにする理由があるのであれば(異なるclass Cのインスタンス間で共通の変数を使いたい場合)その部分を見てみるのもよいかと思います。
ご回答ありがとうございます。
>クラスCのメンバ変数に struct Cのポインタ変数をもっていた
ご指摘とおりの状況です。
しかし、構造体以外のもの(intなど)の変数でも、staticにすると同様のエラーとなり、また、初期化しようとしますと、「error C2864」が出てしまい、const静的整数データ以外はグローバルで初期化できないといったエラーになるようです。
__nogcのクラスは一般の.NETと扱いが変わるみたいですね。
ちょっと難しいですが、今後も調査し続けようと思います。
ありがとうございました!
No.4
- 回答日時:
全然役に立ちませんが 1点だけ:
その結果なら (2) は YES が正しいです. 状況は「コンパイルは通っているがリンクができていない」です.
「コンパイル」と「リンク」はわけて考えてください.
この回答への補足
申し訳ございません。理由がよく分からないのですが、解決しました。
B.hに、、__nogc struct Cの構造体の変数 *をstaticで宣言していたのですが、
このstaticを外したところ、コンパイルが通りました。
全く理由が分からないので、ちゃんとした解決にはなっていないのですが、とりあえずエラーは出なくなったという報告をさせていただきます。
皆様本当にありがとうございました。
ご回答ありがとうございます。
本当に重ね重ね申し訳ありません。VC++に慣れていないようで、簡単な違いにも気付きませんでした。
__gcと__nogcのリンクの違いについて調べれば答えが出てきそうですね。
そちらの方で、ヘルプをもう一度読み返してみます。
No.3
- 回答日時:
もう一度確認ですが(1)、(2)、(3)についてyes/Noで教えてください。
NOの場合は補足をお願いします。(1)__gc class A と__nogc class B と__nogc struct C
は同一プロジェクトでファイルが別。(classBとstruct Cは同一ファイルで定義)
(2)この状態だとコンパイルは通るがリンクでエラーになる(LNK2020)
(3)__gc class Bと定義を変えるとするとコンパイルもリンクも通る。
でよいですか?
(2)が正しいとするコンパイルは通っているので名前空間の問題ではないとは思います。
たびたびのご回答、まことに感謝いたします。
ご指摘の点を、お答させていただきます。
(1)yes
(2)no
LNK2020のビルドエラーとなるため、コンパイルは通っていません。(※他のエラーは出ていません)
(3)yes
名前空間は指定してあります。No.1様にお礼致しましたが、__nogcにアクセス指定子がつけられないのは、
何か関係あるのでしょうか?
また、疑問点ございましたら、なんなりとお願い申し上げます。
No.1
- 回答日時:
クラスが違えば名前空間も異なる筈です。
異なる名前空間にあるオブジェクトを参照する場合は、名前空間を明示しなければなりません。
オブジェクトの定義が「他のクラスからの参照を許している」状態で「正しい参照」さえすれば、どこにあるオブジェクトだろうが参照出来る筈です。
ご回答ありがとうございます。
__nogc classはアクセス指定子が指定できない(publicなどを書くとC3381エラーとなる)という仕様ですが、
そもそも__nogcのクラスは他所から使用できないのでしょうか?
__nogcクラス内の__nogc structの内部には、きちんとpublic指定してあります。
名前空間も指定して、呼び出し側で、呼び出し元のnamespaceをusingしています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- 教えて!goo ここはレベルが低いとか回答者の質が低いとかの質問があります。 11 2023/03/18 19:05
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- UNIX・Linux 【初心者】aws lightsail で自作のオリジナルテーマのwordpressを設定する方法 1 2022/07/14 09:46
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
.jarファイルの中身って書き換...
-
IIS環境でJAVAを使用したい
-
「識別子がクラス名でも名前空...
-
日本語対応 逆コンパイラについて
-
逆コンパイルの見方について
-
Javaのコンパイル結果が表示さ...
-
__gcクラスから、__nogcクラス...
-
warファイルを展開するとタイム...
-
Java 文字コードのエンコーディ...
-
antでコンパイルするとき
-
javaの簡単なソースがコンパイ...
-
Javaについて教えてね。
-
macでjavaをはじめたいのですが...
-
javax.servlet は存在しません...
-
Tom Cat がJSPをコンパイルする...
-
eclipseについて
-
eclipseの構文エラーについて
-
Eclipse>ant deployでOutOfMemo...
-
コンパイルエラーに出てくる、i...
-
JSPのエラーメッセージを見る方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
.jarファイルの中身って書き換...
-
javaが文字コードの影響でコン...
-
コンパイルエラーに出てくる、i...
-
IIS環境でJAVAを使用したい
-
「識別子がクラス名でも名前空...
-
Eclipse3.5EEでJavaのコンパイ...
-
javax.servlet は存在しません...
-
Javaのコンパイル結果が表示さ...
-
TOMCAT_HOMEって?
-
サクラエディタでjavaのプログ...
-
逆コンパイルの見方について
-
eclipseの構文エラーについて
-
javaの簡単なソースがコンパイ...
-
eclipseの設定のJREとコンパイ...
-
コンパイルができないのですが...
-
TeXで図を挿入できません.助け...
-
warファイルを展開するとタイム...
-
JAVAでC/C++の条件コンパイルの...
-
配列に対してsetText()は使えな...
-
java サーブレットのサンプルプ...
おすすめ情報