問題タブ [linkage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2165 参照

flash - AS3ライブラリシンボルリンケージ

ライブラリシンボルの基本クラスとして作成したクラスの使用に問題があります。

AvSkinのインスタンスの表示として機能するクラスを作成しましたAvChild。次のようになります。

明らかに多くのことはしませんが、重要なのは、後で追加できることです(つまり、render()メソッド)。

問題は、これが拡張DisplayObjectされ(スキンを、、、などにすることができるようにTextFieldSimpleButtonShapeではないMovieClipため、ライブラリシンボルの基本クラスとして設定すると、このエラーがスローされることです。

5000:クラス'avian.environment.skins.AvSkin'は、そのタイプのライブラリシンボルにリンクされているため、'flash.display.MovieClip'をサブクラス化する必要があります。

これを回避する方法はありますか?次のいずれも実行したくありません。

  1. 拡張AvSkinしますMovieClip
  2. を拡張するライブラリシンボルのクラスを作成しますAvSkin

DisplayObjectを拡張するものの詳細な表現については、ここを参照してください。これは、私の質問の背後にある推論を裏付けるのに役立つ可能性があります。

0 投票する
4 に答える
3481 参照

c++ - c & c++ デフォルトのグローバル変数リンケージ、複数宣言 & 定義の問題

例えば:

code1.c / .cpp

code2.c / .cpp

コンパイルに行きます:

CとC++の間にグローバル変数リンケージの違いはありますか?

0 投票する
1 に答える
4586 参照

c# - C++/CLI->C# エラー C2526: C リンケージ関数は C++ クラスを返すことができません

クラスの2つの静的メンバーを公開するVS2010 C#で構築された単純な.NET dllがあります

次に、VS2010 C++ からコンソール アプリを作成し、この関数を _tmain の上に追加しました。

参照を追加してコンパイルすると、このエラーが発生します

私の観察のいくつか:

  • extern "C" を削除すると、正常にコンパイルされます
  • Test(List<int> test)名前を変更すると、正常にコンパイルされますTest2(List<int> test)

私の質問は、何がうまくいかないのか、C++ 側からそれを修正する方法です。

私の現在の回避策は、C# でメソッドの名前を変更することですが、これを行う必要はありません。C++ プロジェクトに欠けている可能性のある設定があると感じています。

編集:

C++ でより良い回避策を見つけました。別の関数で .NET 呼び出しをラップできるようです。

これをしなければならないのはばかげているようですが、コンパイラのバグなのだろうか? 私が怖いのは、そのようなメソッドを使用していて、C# 開発者が後でそのような静的メソッドを追加して C++ ビルドを壊してしまうのではないかと心配しなければならないことです。

0 投票する
6 に答える
5753 参照

c++ - クラスには外部リンケージがありますか?

A.cpp と B.cpp のような 2 つのファイルがあります。

今、どこか ( https://en.cppreference.com/w/cpp/language/static ) で、クラスに外部リンケージがあることを読みました。そのため、ビルド中に複数の定義エラーが発生することを期待していましたが、逆に魅力的に機能しました。しかし、A.cpp でクラス w を定義すると、再定義エラーが発生し、クラスに内部リンケージがあると思われます。

ここで何か不足していますか?

0 投票する
1 に答える
467 参照

c++ - 暗黙の内部リンケージは明示的な内部リンケージ (「静的」) と同じではありませんか?

今日、私は、おそらくそれほど重要ではないが、それでも私を困惑させる特殊性に遭遇した。たぶん、私も C++ を正しく理解していないだけです。

ソース ファイル内の一部の配列は、次のように文字列リテラルを指します。

これらのポインター配列は、ライブラリーから関数ポインターを取得するために渡される以外の方法で使用されることはありませんGetProcAddress(これは、非ブロッキング動的 OpenAL/EFX/capture 関数ローダーおよびコンテキスト クリエーター/マネージャーです)。

static const最終的に、これらの変数は .cpp ファイルの外部では必要ないため、これらの変数を宣言する必要があるのではないかと思いました。そのため、内部リンケージを明示的にすることが適切に思えました。いずれにせよ内部リンケージが必要なので (ISO14882 3.5(3))、コンパイラーが既に想定していることを明示することによってのみ、善良な市民になることができます。

その無害な変更を行うと、実行可能ファイルのサイズが 512 バイト増加しました。追加の 512b は実際には問題ではありませんが、まったく同じことが別のコードになるということは意味がないように思えました。非推奨 (ISO14882 7.3.1.1(2)) であるためstatic const、匿名の名前空間も試しましたが、同じ結果が得られました。

アセンブラー ソースを見ると、明示的な内部リンケージ (staticまたはnamespace{}) によって文字列リテラルが.rdataではなくに移動され、文字.data列リテラルは、すべての文字列とすべてのポインターを 1 つのブロックに含める代わりに、文字列リテラルへのポインター配列でインターリーブされることがわかります。それぞれ。ここにもおそらく異なるサイズの理由があります.1つのセクションから別のセクションへのデータのシャッフルがセクションサイズの制約に達した可能性が非常に高いです. 興味深いことに、3 つのフレーバーはすべて名前の付け方も異なります。

今、私は疑問に思っています:私は誤りを犯していますか?それらのポインターは内部リンケージを持っていないはずですか?

また、私の理解constでは、すでに読み取り専用ですが、どこまでstatic const「読み取り専用」ですか(一方は入り.rdata、もう一方は入りません)?

0 投票する
1 に答える
169 参照

c++ - 名前空間でのメッセージ定数のラッピング

メッセージIDに対応する一連の定数文字列があります。これらの定数は、アプリケーションのさまざまなクラスで使用されるため、一元化された場所を作成しようとしています。私はもともとそれらを含む名前空間を作成しようとしていました:

それから私は内部/外部リンケージの定義について読み始めました、そして今私はいくつかの質問があります。

1)定数を作成しないことの唯一の欠点は、定数が内部リンクを持っているため、それらをテンプレート引数として使用できないという事実を外部化することですか?

2)私が気付いていない私のアプローチに他の欠点はありますか?

0 投票する
2 に答える
548 参照

java - WebSphere の XML.loadString が java.lang.VerifyError をスローする

XML.loadString(...)WebSphere 6.1 ND で MDB を呼び出しています。私は、この質問java.lang.VerifyErrorで説明されているものと同様に取得しています。

スタックトレースは次のとおりです。

私も使用すると発生しConstructingParserます:

私はScala v2.9.0.1を使用しています

このクラス リンケージの問題をどのように診断できますか?

編集#1

よく考えてみると、無関係な変更の後に問題が発生したことに気付きました。直感で、WAS からアプリケーションを完全にアンインストールしてから、再インストールしました。問題はなくなりました。この問題は、次のアプリケーションの更新(つまり、上書き) 後に再発しました。

さらに数時間後、Scala XML 解析に関係のない他の変更を行った後、アンインストール/再インストールするのを忘れ、代わりに更新を行いました。問題は再発しませんでした。問題を再現できなくなりました。

編集#2

問題が再発し、アンインストール/再インストールだけでは解決できません。Scala 2.8.1 で再試行しましたが、問題は解決しません。ここで、サーバーのアンインストール/電源オフ/一時ファイルの削除/再インストール/サーバーの再起動を試みます。幸運を祈ります。

0 投票する
2 に答える
164 参照

c++ - 名前空間スコープのクラスに適用された場合、静的とはどういう意味ですか?

static名前空間スコープでは「内部リンク」を意味することを私は知っています。ここで、次のコードについて考えてみます。

、またはその両方にstatic適用されますか?Foofoo

0 投票する
5 に答える
2766 参照

c - 構造体定義に内部リンケージがあるのはなぜですか?

(私は C について話していますが、C++ のクラス テンプレートにも当てはまります)

ヘッダーファイルには、定義ではなく、すべての宣言を入れるのが習慣です。ただし、通常、構造定義やクラス テンプレートもヘッダー ファイルに配置しますが、その理由を実際に理解することはありません。これらは定義でもあるため、これは実際には意味がありません-1つの定義ルール。(はい、構造定義とクラス テンプレートによってストレージが設定されることはありませんが、定義であることを意味する以下の「再定義」エラーが引き続き発生します)。

例) 同じファイル内で同じタグを持つ複数の構造体を定義すると再定義エラーが発生しますが、複数のソース ファイルで同じタグを持つ複数の構造体を定義してもエラーは発生しません (クラスでも同じことが起こります)。

意味のある唯一のことは、構造定義とクラス テンプレートに内部リンケージ (デフォルトの外部リンケージとは対照的) があることですが、K&R またはリファレンス マニュアルでそれに関する参照を見つけることができません。実際、構造はリンケージでも言及されていません。

ANSI標準がこの現象を指摘している正確な参照を知りたいです。(IMO、これは ANSI 標準のどこかで言及されなければならないかなりあいまいなものです)。


編集 構造定義をヘッダーファイルに入れることができる理由を尋ねているわけではありません。

構造体定義をヘッダー ファイルに配置しても、変数定義をヘッダー ファイルに配置した場合 (およびそれを複数のソース ファイルにインクルードした場合) のように、再定義エラーが発生しない理由を尋ねています。

例) test1.c: int a = 3; test2.c: int a = 4; 再定義によりコンパイルエラーとなります。でも、

test1.c: struct test { int a }; test2.c: struct test { int b }; コンパイルエラーは発生しません。私が思いつく唯一の理由は、構造定義に内部リンケージがあるか、リンケージがまったくないことです。

0 投票する
2 に答える
483 参照

windows - WinNLSに対するリンク

関数を使用するためにリンクするには、どの静的ライブラリを使用する必要がありNormalizeString()ますか?

MSDNに記載されているほとんどの関数とは対照的に、関数を使用するために必要な静的ライブラリは宣言されていません。DLLから派生した名前を使用しようとしましたが、正常にリンクされましたが、実行時 に、コンピューターに見つからないnormaliz.lib というポップアップが表示され、プロセスがシャットダウンされます。Normalization.dll