2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
bug - useita määritelmiä
Ongelmasi on, että kohtasit C++-koodissasi "viittaus "data" on epäselvä" -virheen. Tämä virhe ilmenee yleensä, kun yrität viitata muuttujaan, jolla on useita määritelmiä.
Koodissasi määrität globaalin muuttujan tiedot. Samalla C++-standardikirjastossa on myös data-niminen funktiomalli. Kun käytät dataa fib-funktiossa, kääntäjä ei voi määrittää, haluatko viitata globaaliin muuttujan dataan vai std::dataan, joten se antaa epäselvän virheen.
Tämän ongelman ratkaisemiseksi voit muuttaa globaalin muuttujan datan nimeä tai määrittää nimenomaisesti, että haluat viitata globaaliin muuttujaan kutsuttaessa.
Ratkaisu 1: Muuta globaalin muuttujan nimi
cpp
#sisältää<iostream>
käyttäen nimiavaruutta std;
int mod=1e9+7;
int fibData[10000] //Vaihda nimi
int fib(int n){
if(n==1||n==2){fibData[n]=1;palauta fibData[n];}
if(fibData[n]!=0)return fibData[n];
fibData[n]=fibData[n-1]+fibData[n-2];
palauttaa fibData[n];
}
int main() {
int t;
cin>>t;
for(int i=0;i
int n;
cin>>n;
cout<
}
paluu 0;
}
Ratkaisu 2: Määritä nimenomaisesti, että haluat viitata globaaliin muuttujaan kutsuessasi
cpp
#sisältää<iostream>
käyttäen nimiavaruutta std;
int mod=1e9+7;
int data[10000];
int fib(int n){
if(n==1||n==2){::data[n]=1;return ::data[n];} // Lisää '::' eteen määrittääksesi selvästi, että haluat viitata globaali muuttuja
if(::data[n]!=0)return ::data[n];
::data[n]=::data[n-1]+::data[n-2];
paluu ::data[n];
}
int main() {
int t;
cin>>t;
for(int i=0;i
int n;
cin>>n;
cout<
}
paluu 0;
}