問題タブ [redefinition]
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.
c - *_get_type(void) gtk+ 必須メソッドの再定義
すでに見出しで述べたように、修正できないように見えるコンパイル エラーが発生します。
エラーがこの行を指している場所(このコード スニペットの最初):
ノートの行はタイプ設定を指しています
両方のスニペットは.c ファイル内にあります (メモ行はエラー行の上にあります)。
助けていただければ幸いです..私は混乱しています。その gtk+ マクロが、独自の gobject ベースのクラス初期化子とファイナライザー (存在する場合) (この場合は GtkNotebook に基づく) 用にセットアップする必要がある関数を再定義する必要があるのはなぜですか。
c - 「異なる種類のシンボルとしての 'foo' の再定義」
私はいくつかの古いコードをリファクタリングして持ち込もうとしていますが、次のようなものに出くわしました:
コンパイルしようとすると、次のようなエラーが発生します。
誰がこれを引き起こしているのか知っていますか? 私は長い間コードに触れていませんでしたが、それに関連するエラーは確かに覚えていません。これはコードベースの中で最もコアなコードの一部であり、すべてがそれに依存しています。本当にエラーである場合、そのような明白なエラーを見逃した可能性があるとは思いません。オリジナルfoo
は「struct タグ」 (struct
キーワードの後の適切な参照のみ) であるため、どのようにして新しいfoo
typedef された型と競合するのでしょうか?
編集 1:これが実際のファイル全体です。何か不足している可能性がありますが、かなり単純なようです。上記と同じエラーを、タイプごとに 1 つずつダンプします。
(また、このe()
マクロは無視してください。この場合はノープです。)
c - 特定のエラーを無視するか、エラーから警告に変更するようにEclipsegccコンパイラーを設定する方法
多くのCソースファイルとヘッダーファイルで構成されるプロジェクトをビルドする必要があります。プロジェクトは警告付きでxcodeでコンパイルされますが(これは問題ありません)、WindowsXPのEclipseでGNUgcc Cコンパイラを使用してコンパイルしようとすると、多くの「再宣言」および「ネストされた再定義」エラーが発生します。これらのエラーはすべて、いくつかの異なるヘッダーファイル内の列挙子のtypedefを参照しています。
これらの各ヘッダーファイルには、ファイル全体に適切な#ifndef /#define /#endifタグがありますが、1つのヘッダーファイルにそれぞれ他の複数のヘッダーファイルが含まれるように、同じ列挙子をtypedefします(typedefを複数のヘッダーにコピー/貼り付けします)。そのうち、同じ名前の同じ列挙型typedefを持っています。
これはxcodeで警告付きでコンパイルされると言われ、既存のコードを変更することは許可されていません。
xcodeで警告を表示してコンパイルするため、Eclipseでこれらのエラーを無視するか、警告に変更してコンパイルする方法を見つけようとしましたが、失敗しました。コンパイラが最初または最後の定義/宣言を使用するかどうかは関係ありません。それらは同一の再定義/再宣言です。
これを行う方法はありますか?
編集:エラーフラグを使用したコンパイル-Wall
assemblies - 参照されたアセンブリ内の特定のシンボルを無視する
共通のコード バッチを使用する 2 つのマネージ アセンブリがあります。相互に参照すると、予想どおり、コンパイラは複数の再定義について不平を言います。プロジェクトのコンパイル中に、参照されたアセンブリに存在する一般的なシンボルを無視することはできますか? または、そのような設定を可能にする他の方法/回避策はありますか?
function - PowerShell - コマンドレットの名前を関数と同じ名前でオーバーライドする場合、関数でコマンドレットを呼び出すにはどうすればよいですか?
そのため、変更するアクセス権がない update-name という名前のコマンドレットがあります。
update-name (コマンドレットと同じ名前) という名前の関数を作成しました。同じ名前の関数からコマンドレットを呼び出すにはどうすればよいですか?
私はいくつかのことを試しましたが、どれもうまくいかないようです。
関数だけの場合は、次の方法があります。
残念ながら、それが CmdLet の場合は機能しません。
c++ - データメンバーが再定義された場合のクラスの実装
データ メンバーを再定義すると、クラスの実装はどうなりますか? たとえば、次があるとします。
バー オブジェクトの表現には、b フィールドが 1 つ含まれていますか、それとも 2 つ含まれていますか? 2 つある場合、両方にアクセスできますか、それとも 1 つだけですか? どのような状況で?
c - 可変再定義、埋め込みc
私は組み込みCプロジェクトに取り組んでおり、グローバル変数の再定義に問題があります。
関数の宣言と定義をいくつかの.hファイルと.cファイルに分割しました。これらの関数の多くは、global_vars.hで定義されているグローバル変数にアクセスする必要があります。したがって、ヘッダーファイルの先頭の#ifndef、#defineセクション内の「global_vars.h」。そうしないと、ご想像のとおり、未定義の変数エラーが大量に発生します。
ただし、global_vars.hに#ifndef _GLOBAL_VARS_H_ #define ... #endifがある場合でも、すべてのグローバル変数の再定義エラーが発生します。私の推測では、リンカがさまざまなオブジェクトファイルをリンクしようとすると、すべての「blah_blah.h」ファイルにある#include「global_vars.h」による再定義が表示されます。ただし、#ifndef...がこの問題を処理することは私の理解でした。
見落としているものはありますか?
前もって感謝します
gcc - GCC 4.3 では「typedef の再定義」エラーが発生し、GCC 4.6 では発生しないのはなぜですか?
コンパイルに GCC 4.6 を使用してアプリケーションを開発していますが、ユーザーから「typedef の再定義」エラーが報告されました。ユーザーに Git を使用して最新のソースを取得するように誤って伝えて混乱した後、詳しく調べたところ、次のようなものが見つかりました。
古い GCC バージョンで修正するのは非常に簡単ですが、なぜこれがエラーではなくなったのでしょうか? それとも報告が必要ですか?
c++ - トラブルの定義。C ++
それは単純化されたコードです!私はC++ファイル(実装の場合)とヘッダーファイル(クラス定義の場合)を持っています!
main.hを含むFoo.cppというファイルがあります。そして、funcs Foo.cppを使用し、 main.hも含むファイルBar.cppがあります。構造体を使用してFooオブジェクトにアクセスし、その関数を呼び出します。しかし、main.hで定義された構造体?私はそれを次のように解決しようとしました:
しかし、それは原因です:
私のコードの何が問題になっていますか?また、それは実際のコードではありません。私は実際のプロジェクトを簡素化し、不要なものをすべて削減しました。もちろん、Foo.cppとBar.cppには、FooクラスとBarクラスが定義されているヘッダーがあり、.cppファイルではそれらの実装のみです。killAllHumans()
ある場所でmain.cppからも呼び出されmain()
ます。
*編集済み*ヘッダーで機能する
ことは知ってい#include
ますが、「擬似コード」と書きました。readlプロジェクトでヘッダーファイルとcppファイルを使用し、ヘッダーのみをインクルード#pragma once
してヘッダーに含めています。この質問では、コードを単純化するだけです。答える前にすべての質問を読んでください!
* EDITED2 * 今すぐコンパイルしようとしました。できます。変。
ありがとう。
c++ - インライン関数を再定義するとどうなりますか?
私は奇妙な問題に何日も費やしましたが、最終的inline
に、プロジェクトに同じ署名の 2 つの関数があり、それらが問題の原因であることを発見しました。状況を簡単にするために、以下に例を示します: 2 つの cpp ファイル:
a.cpp
および b.cpp
inline
関数echo
のシグネチャは同じですが、実装が異なることに注意してください。コンパイルして実行
または、このように
印刷し0 0
ます。(私はそのためにg ++ 4.6.1を使用していました.clang ++ 2.9でテストしましたが、同じ結果です)
次のように最適化をオンにすると、それは起こりません
0 1
今回です。
私の質問は、結果やコンパイルの実行方法に関係なく、inline
関数を複数回定義したというエラーや警告さえないということです。このような状況では、コンパイラとリンカは一体どうなるのでしょうか?
編集:
オブジェクトファイルのシンボルを見てください
両方のファイルにレコードがありecho()
ます。したがって、問題はリンク時に発生すると思います。リンカーはランダムに 1 つの実装を選択し、他のすべてを破棄すると言えますか?