技術共有

バグ - 複数の定義

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

バグ - 複数の定義

あなたの問題は、C++ コードで「'data' への参照があいまいです」エラーが発生したことです。このエラーは通常、複数の定義がある変数を参照しようとすると発生します。

コードでは、グローバル変数 data を定義します。同時に、C++ 標準ライブラリには data という名前の関数テンプレートも存在します。 fib 関数で data を使用する場合、コンパイラはグローバル変数 data を参照するのか、std::data を参照するのかを判断できないため、あいまいなエラーが発生します。

この問題を解決するには、グローバル変数データの名前を変更するか、呼び出し時にグローバル変数を参照することを明示的に指定します。

解決策 1: グローバル変数名を変更する

cpp

#含む<iostream>

名前空間 std を使用します。

 

整数 mod = 1e9 + 7;

int fibData[10000]; //名前を変更します

 

int fib(int n){

if(n==1||n==2){fibData[n]=1;fibData[n]を返します;}

if(fibData[n]!=0)fibData[n]を返します。

fibData[n]=fibData[n-1]+fibData[n-2];

fibData[n]を返します。

 

int main() {

整数t;

cin&gt;&gt;t;

for(int i=0;i

整数n;

cin&gt;&gt;n;

カウント&lt;

  } 

0を返します。

}

解決策 2: 呼び出し時にグローバル変数を参照することを明示的に指定する

cpp

#含む<iostream>

名前空間 std を使用します。

 

整数 mod = 1e9 + 7;

整数データ[10000];

 

int fib(int n){

if(n==1||n==2){::data[n]=1;return ::data[n];} // 先頭に「::」を追加して、参照したいことを明確に指定しますグローバル変数

if(::data[n]!=0) ::data[n] を返します。

::データ[n]=::データ[n-1]+::データ[n-2];

::data[n]を返します。

 

int main() {

整数t;

cin&gt;&gt;t;

for(int i=0;i

整数n;

cin&gt;&gt;n;

カウント&lt;

  } 

0を返します。

}