Неверная инициализация ссылки типа ошибки - PullRequest
1 голос
/ 17 мая 2011

Миллион, спасибо всем, кто готов помочь мне с этим.

Сначала код:

#include <iostream>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

void Beolvas (vector<vector<int> > mat);
bool VanNemNull (const vector<vector<int> > &mat);

int main()
{
cout << "Van-e a mátrixnak olyan oszlopa, hogy a főátló alatt csak 0-át tartalmaz, és ha igen, akkor melyik az?\n" <<endl;

    char ch;
    do{
        // Adatbevitel
        vector<vector<int> > mat;
        Beolvas(mat);

        //Kiértékelés
        int i;
       if (VanNemNull(&mat[i])) cout<<"szupiiiiii";

        cout<< endl << "Futtassam újra?   (I/N)";cin>>ch;
        }while (ch!='n' && ch!='N');
    return 0;
}

void Beolvas(vector<vector<int> > mat)
{
    ifstream fajl;
    bool hiba;
    string str;

    do{
        cout << "Fajl neve:";
        cin >> str;
        fajl.open(str.c_str());
        if (hiba = fajl.fail())
        {
            cout << "Nincs ilyen nevű fájl" << endl;
            fajl.clear();
        }
    }while (hiba);

    int n;
    fajl >> n;
    if (n<1)
    {
        cout<<"Helytelen a mátrix mérete\n Kérem ellenőrizze a forrásfájlt!\n";
        cout<<"E megnyomásával kilép"<<endl;

    char ex;
    do{
        cin>>ex;
        }while (ex!='e' && ex!='E');exit(0);
    }

    mat.resize(n);
    for(int i=0; i<n; ++i)
        {
            mat[i].resize(n);
            for (int j=0; j<n; ++j)
            {
                fajl >> mat[i][j];
            }
        }
    fajl.close();
    cout<<"A mátrix a következöképpen néz ki:"<<"\n";
    cout<<"Elemszáma: "; cout<<n*n<<"\n";
    for (int i=0; i<n; ++i)
        {
            for (int j=0; j<n; ++j)
            {
                cout<<mat[i][j]<<"\t";
            }
            cout<<"\n";

        }

}

/*void Vansor (const vector<vector<int> > mat)
{
    //bool l = false;
}*/

bool VanNemNull (const vector<vector<int> > mat)
{
    bool l = false;
    int i=0;
    cout<<(int)mat.size();
    for (int j=i+1; !l && j<(int)mat.size(); ++j)
    {
        cout<<mat[j][i]<<"\n";
        if (l) cout<<"hej\n";
        l = (mat[j][i]!=0);
        if (l= true) cout<<"22"; else cout<<"11";

    }
    return (l);
}

Основная проблема (я думаю) - последняя часть. Кроме того, я получаю эти сообщения об ошибках:

||In function `int main()':|
|23|error: invalid initialization of reference of type 'const std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&' from expression of type 'std::vector<int, std::allocator<int> >*'|
|9|error: in passing argument 1 of `bool VanNemNull(const std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&)'|
||=== Build finished: 2 errors, 0 warnings ===|

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Сначала ваша ошибка компиляции:

vector<vector<int> > mat;
...
if (VanNemNull(&mat[i])) cout<<"szupiiiiii";

не соответствует: bool VanNemNull (const vector<vector<int> > mat);

вы передаете копию vector_of_ints (элемент vector_of_vector_of_int) в качестве параметра.Вы должны либо вызвать его так:

if (VanNemNull(mat)) ...

или изменить функцию так, чтобы она выглядела так:

 bool VanNemNull (const vector<int> > mat);

и изменить реализацию (в отношении использования mat [J] [я] ).

Также вы используете переменную i в if (VanNemNull(&mat[i]) без инициализации i.

Во-вторых, ваш вызов

void Beolvas(vector<vector<int> > mat );

также выполняется с копией mat, поэтомуизменения, которые вы делаете в BeolVas (..), применяются к этой копии и будут потеряны, когда функция вернется.Вы должны изменить его на:

void Beolvas(vector<vector<int> >& mat )

0 голосов
/ 17 мая 2011

&mat[i] имеет тип vector<int>*, и вы передаете его функции, которая принимает ссылку на vector<vector<int> >.Я не понимаю, что делает ваш код достаточно хорошо, чтобы рассказать вам, как это исправить, но теперь вы знаете, что означает ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...