bug——多重定義
你的問題是在C++代碼中遇到了"reference to 'data' is ambiguous"的錯誤。這個錯誤通常發生在你嘗試引用一個具有多重定義的變量時。
在你的代碼中,你定義了一個全局變量data,同時,C++標準庫中也有一個名為data的函數模板。當你在fib函數中使用data時,編譯器無法確定你是想引用全局變量data還是std::data,因此它給出了一個模糊的錯誤。
為了解決這個問題,你可以改變全局變量data的名稱,或者在調用時明確指定你要引用的是全局變量。
解決方案一:更改全局變量名稱
cpp
#include <iostream>?
using namespace std;?
?
int mod=1e9+7;?
int fibData[10000]; // 更改名稱?
?
int fib(int n){?
? if(n==1||n==2){fibData[n]=1;return fibData[n];}?
? if(fibData[n]!=0)return fibData[n];?
? fibData[n]=fibData[n-1]+fibData[n-2];?
? return fibData[n];?
}?
?
int main() {?
? int t;?
? cin>>t;?
? for(int i=0;i<t;i++){?
??? int n;?
??? cin>>n;?
??? cout<<fib[n];?
? }?
? return 0;?
}
解決方案二:在調用時明確指定你要引用的是全局變量
cpp
#include <iostream>?
using namespace std;?
?
int mod=1e9+7;?
int data[10000];?
?
int fib(int n){?
? if(n==1||n==2){::data[n]=1;return ::data[n];} // 在前面加上 '::' 明確指定你要引用的是全局變量?
? if(::data[n]!=0)return ::data[n];?
? ::data[n]=::data[n-1]+::data[n-2];?
? return ::data[n];?
}?
?
int main() {?
? int t;?
? cin>>t;?
? for(int i=0;i<t;i++){?
??? int n;?
??? cin>>n;?
??? cout<<fib[n];?
? }?
? return 0;?
}