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;
 }

Main クラスは私たちに与えられ、参照ではなく値による呼び出しを含み、私の教授はこれを機能させました。

私が受け取るエラーは次のとおりです。

 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’

何でも教えていただけると助かります。

前もって感謝します!

4

1 に答える 1

1

Scanner はコピーすることを意図していないと思います。構文:

int Similarity::readData(Scanner inFile){

Scanner が、渡された変数から、このメソッドによって受信された変数に、Scanner のコピー コンストラクタを介してコピーされることを意味します。

Scanner は、フードの下で iostream を処理するもののように聞こえます。iostreams ライブラリのストリームにはコピー コンストラクタがありません

どのように参照渡しを試みたのかは完全にはわかりませんが、このファイルと対応する .h ファイルの署名を次のように変更する必要があります。

int Similarity::readData(Scanner& inFile){

そして、あなたは何の問題もないはずです。readData渡されたファイルへの参照を受け取るようになりました。これは基本的に、渡されたもののエイリアスです。これに対して行うことはすべて、渡されたオブジェクトに反映されます。

于 2013-09-19T02:40:18.497 に答える