2013-09-19 2 views
1

Итак, это то, что у меня есть сейчас, со Сканером, предоставленным моим профессором.Ошибка: неизвестное преобразование для

#include "Similarity.h" 
#include "Scanner.h" 
using namespace std; 

int Similarity::readData(Scanner inFile){ 
    int similarityInputSize; 
    vector< vector<int> > containingVector; 
    bool nextValueFound; 
    similarityInputSize = inFile.nextInt(); 
    int lineCount = 0; 
    while(inFile.hasNext()){ 
      containingVector.push_back(vector<int>()); 
      for(int i = 0; i < similarityInputSize; i++){ 
        containingVector[lineCount].push_back(inFile.nextInt()); 
      } 
      lineCount++; 
    } 
    for(int i = 0; i < containingVector.size(); i++){ 
      for(int j = 0; j < similarityInputSize; i++){ 
        cout << containingVector[i][j] << " "; 
      } 
      cout << endl; 
    } 
    return 0; 
} 

Главный класс предоставляется нам и включает в себя призыв по значению не по ссылке, которую мой профессор получил на работу.

ошибки, которые я получаю, являются:

In file included from /usr/include/c++/4.7/ios:43:0, 
      from /usr/include/c++/4.7/ostream:40, 
      from /usr/include/c++/4.7/iostream:40, 
      from ../../Utilities/Utils.h:17, 
      from Main.h:11: 
/usr/include/c++/4.7/bits/ios_base.h: In copy constructor ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’: 
/usr/include/c++/4.7/bits/ios_base.h:788:5: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private 
In file included from /usr/include/c++/4.7/ios:45:0, 
      from /usr/include/c++/4.7/ostream:40, 
      from /usr/include/c++/4.7/iostream:40, 
      from ../../Utilities/Utils.h:17, 
      from Main.h:11: 
/usr/include/c++/4.7/bits/basic_ios.h:64:11: error: within this context 
In file included from ../../Utilities/Utils.h:18:0, 
      from Main.h:11: 
/usr/include/c++/4.7/fstream: In copy constructor ‘std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)’: 
/usr/include/c++/4.7/fstream:420:11: note: synthesized method ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’ first required here 
In file included from /usr/include/c++/4.7/ios:44:0, 
      from /usr/include/c++/4.7/ostream:40, 
      from /usr/include/c++/4.7/iostream:40, 
      from ../../Utilities/Utils.h:17, 
      from Main.h:11: 
    /usr/include/c++/4.7/streambuf: In copy constructor ‘std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)’: 
    /usr/include/c++/4.7/streambuf:800:7: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const __streambuf_type&) [with _CharT = char; _Traits =  std::char_traits<char>; std::basic_streambuf<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]’ is private 
    In file included from ../../Utilities/Utils.h:18:0, 
      from Main.h:11: 
    /usr/include/c++/4.7/fstream:69:11: error: within this context 
    /usr/include/c++/4.7/fstream: In copy constructor ‘std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)’: 
    /usr/include/c++/4.7/fstream:420:11: note: synthesized method ‘std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)’ first required here 
In file included from Main.h:12:0: 
../../Utilities/Scanner.h: In copy constructor ‘Scanner::Scanner(const Scanner&)’: 
../../Utilities/Scanner.h:27:7: note: synthesized method ‘std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)’ first required here 
Main.cpp: In function ‘int main(int, char**)’: 
Main.cpp:58:31: note: synthesized method ‘Scanner::Scanner(const Scanner&)’ first required here 
In file included from Main.h:14:0: 
Similarity.h:23:9: error: initializing argument 1 of ‘int Similarity::readData(Scanner)’ 

Так что я не совсем понимаю, что произошло. Везде, где я смотрел, говорилось, что проблема будет устранена вызовом по ссылке не по значению. Однако его предоставленный код не содержит никакого вызова по ссылкам, что заставляет меня предположить более тонкую ошибку (или ее настолько большую, что она ослепила меня). Тем не менее, я изменил его в любом случае, и он дал мне эти ошибки:

Similarity.cpp:12:5: error: prototype for ‘int Similarity::readData(Scanner&)’ does not match any in class ‘Similarity’ 
Similarity.h:23:9: error: candidate is: int Similarity::readData(Scanner) 
Main.cpp: In function ‘int main(int, char**)’: 
Main.cpp:58:32: error: no matching function for call to ‘Similarity::readData(Scanner*)’ 
Main.cpp:58:32: note: candidate is: 
In file included from Main.h:14:0: 
Similarity.h:23:9: note: int Similarity::readData(Scanner) 
Similarity.h:23:9: note: no known conversion for argument 1 from ‘Scanner*’ to ‘Scanner’ 

Все, что вы можете сказать мне вообще будет помощь.

Заранее благодарен!

+0

как вы назвали код? Вы изменили подпись readData или код вызова? Вы знаете, есть ли у Сканера конструктор копирования (в настоящее время вы говорите ему, чтобы создать копию). –

+0

'Scanner' похоже, имеет элемент' fstream', что означает, что он не может быть скопирован. Скорее всего, вы хотите использовать ссылку. –

ответ

1

Я предполагаю, что сканер не предназначен для копирования. Синтаксис:

int Similarity::readData(Scanner inFile){ 

означает, что сканер будет скопирован из переданных в переменном к переменной, полученном этом способе, с помощью конструктора копирования сканера.

Сканер звучит как нечто, что касается iostreams под капотом. Потоки в библиотеке iostreams делают not have copy constructors.

Я не совсем ясно, как вы пытались пройти по ссылке, но вы должны изменить подпись в этом файле и соответствующий .h файл:

int Similarity::readData(Scanner& inFile){ 

И вы не должны иметь никаких проблем. readData теперь получает ссылку на переданный файл. Это по существу псевдоним переданной вещи - все, что вы делаете с ней, будет отражено на объекте, который был передан.

+0

Вы красивый человек. Работал как шарм. –

Смежные вопросы