'was not declared in this scope' error

前端 未结 5 730
难免孤独
难免孤独 2020-12-01 15:55

So I was writing this simple program to calculate the day of any date using the Gaussian algorithm found here.

#include 
using namespace std;         


        
相关标签:
5条回答
  • 2020-12-01 16:15
    #include <iostream>
    using namespace std;
    class matrix
    {
        int a[10][10],b[10][10],c[10][10],x,y,i,j;
        public :
            void degerler();
            void ters();
    };
    void matrix::degerler()
    {
        cout << "Satırları giriniz: "; cin >> x;
        cout << "Sütunları giriniz: "; cin >> y;
        cout << "İlk matris elamanlarını giriniz:\n\n";
        for (i=1; i<=x; i++)
        {
            for (j=1; j<=y; j++)
            {
                cin >> a[i][j];
            }
        }
        cout << "İkinci matris elamanlarını giriniz:\n\n";
        for (i=1; i<=x; i++)
        {
            for (j=1; j<=y; j++)
            {
                cin >> b[i][j];
            }
        }
    }
    
    void matrix::ters()
    {
        cout << "matrisin tersi\n";
        for (i=1; i<=x; i++)
        {
            for (j=1; j<=y; j++)
            {
        if(i==j)
        {
        b[i][j]=1;
        }
        else
        b[i][j]=0;
        }
    }
    float d,k;
        for (i=1; i<=x; i++)
        {
        d=a[i][j];
            for (j=1; j<=y; j++)
            {
        a[i][j]=a[i][j]/d;
                b[i][j]=b[i][j]/d;
        }
            for (int h=0; h<x; h++)
            {
                if(h!=i)
        {
           k=a[h][j];
                   for (j=1; j<=y; j++)
                   {
                        a[h][j]=a[h][j]-(a[i][j]*k);
                        b[h][j]=b[h][j]-(b[i][j]*k);
                   }
        }
        count << a[i][j] << "";
        }
        count << endl;
    }  
    }
    int main()
    {
        int secim;
        char ch;    
        matrix m;
        m.degerler();
        do
         {
        cout << "seçiminizi giriniz\n";
        cout << " 1. matrisin tersi\n";
        cin >> secim;
        switch (secim)
        {
            case 1:
                m.ters();
                break;
        }
        cout << "\nBaşka bir şey yap/n?";
        cin >> ch;
        }
        while (ch!= 'n');
        cout << "\n";
        return 0;
    }
    
    0 讨论(0)
  • 2020-12-01 16:30

    Here

    {int y=((year-1)%100);int c=(year-1)/100;}
    

    you declare and initialize the variables y, c, but you don't used them at all before they run out of scope. That's why you get the unused message.

    Later in the function, y, c are undeclared, because the declarations you made only hold inside the block they were made in (the block between the braces {...}).

    0 讨论(0)
  • 2020-12-01 16:33

    The scope of a variable is always the block it is inside. For example if you do something like

    if(...)
    {
         int y = 5; //y is created
    } //y leaves scope, since the block ends.
    else
    {
         int y = 8; //y is created
    } //y leaves scope, since the block ends.
    
    cout << y << endl; //Gives error since y is not defined.
    

    The solution is to define y outside of the if blocks

    int y; //y is created
    
    if(...)
    {
         y = 5;
    } 
    else
    {
         y = 8;
    } 
    
    cout << y << endl; //Ok
    

    In your program you have to move the definition of y and c out of the if blocks into the higher scope. Your Function then would look like this:

    //Using the Gaussian algorithm
    int dayofweek(int date, int month, int year )
    {
        int y, c;
        int d=date;
    
        if (month==1||month==2)
        {
             y=((year-1)%100);
             c=(year-1)/100;
        }
        else
        {
             y=year%100;
             c=year/100;
        }
    int m=(month+9)%12+1;
    int product=(d+(2.6*m-0.2)+y+y/4+c/4-2*c);
    return product%7;
    }
    
    0 讨论(0)
  • 2020-12-01 16:33

    You need to declare y and c outside the scope of the if/else statement. A variable is only valid inside the scope it is declared (and a scope is marked with { })

    #include <iostream> 
    using namespace std; 
    //Using the Gaussian algorithm 
    int dayofweek(int date, int month, int year ){ 
    int d=date; 
    int y, c;
    if (month==1||month==2) 
            {y=((year-1)%100);c=(year-1)/100;} 
    else 
            {y=year%100;c=year/100;} 
    int m=(month+9)%12+1; 
    int product=(d+(2.6*m-0.2)+y+y/4+c/4-2*c); 
    return product%7; 
    } 
    
    int main(){ 
    cout<<dayofweek(19,1,2054); 
    return 0; 
    } 
    
    0 讨论(0)
  • 2020-12-01 16:40

    Here's a simplified example based on of your problem:

    if (test) 
    {//begin scope 1
        int y = 1; 
    }//end scope 1
    else 
    {//begin scope 2
        int y = 2;//error, y is not in scope
    }//end scope 2
    int x = y;//error, y is not in scope
    

    In the above version you have a variable called y that is confined to scope 1, and another different variable called y that is confined to scope 2. You then try to refer to a variable named y after the end of the if, and not such variable y can be seen because no such variable exists in that scope.

    You solve the problem by placing y in the outermost scope which contains all references to it:

    int y;
    if (test) 
    {
        y = 1; 
    }
    else 
    {
        y = 2;
    }
    int x = y;
    

    I've written the example with simplified made up code to make it clearer for you to understand the issue. You should now be able to apply the principle to your code.

    0 讨论(0)
提交回复
热议问题