-4

ユーザーが映画のキーワードを入力すると、プログラムがタイトルでそれを検索し、結果を返すプログラムを作成しようとしています。私はそれをしようとする方法にこだわっています。ヘッダー クラスにデフォルトのコンストラクターがないというエラーが発生し続けます。これを修正する方法がわかりません。

これはヘッダークラ​​スです

// Movies.h
#ifndef MOVIES_H
#define MOVIES_H
#include "Movie.h" // include Movie class definition
#include <string>
using namespace std;

class Movies {
// data is private by default
static const int MAX_MOVIES = 1000;
Movie movies[MAX_MOVIES];
int movieCnt;

public:
Movies(string);
void Test(string);
const Movie getMovie(int);


private:

void loadMovies(string);
string myToLower(string);
};
#endif

これは、ヘッダーの cpp ファイルです。

// Movies.cpp
#include "Movie.h" // include Movie class definition
#include "Movies.h" // include Movies class definition
#include <fstream>
using namespace std;

 Movies::Movies(string fn){loadMovies(fn);}


 const Movie Movies::getMovie(int mc) {
return movies[mc-1];
}

void Movies::loadMovies(string fn) {
ifstream iS(fn);
string s;
getline(iS, s); // skip heading
getline(iS, s);
movieCnt=0;
while(!iS.eof()) {
    movies[movieCnt++] = Movie(s);
    getline(iS, s);
}
iS.close();
}

 void Movies::Test(string key)
{
Movies[1];
}

string Movies::myToLower(string s) {
int n = s.length();
string t(s);
for(int i=0;i<n;i++)
    t[i] = tolower(s[i]);
return t;

}

これが私の主な機能です

// MovieInfoApp.cpp
#include "Movie.h" // include Movie class definition
#include "Movies.h" // include Movies class definition
#include <iostream>
#include <string>
using namespace std;

void main() {
Movies movies("Box Office Mojo.txt");
string answer, key;
bool set = false; 
int movieCode, ant;
cout<< "Would you like to start the Movie search?";
cin>> answer;
while (answer =="y" ||answer =="Y")
{
    cout<< "would you like to enter a movie name or a movie number? (press 1      for movie name press 2 for number";
    cin>>ant;
    if (ant = 2)
    {

        cout << "Please enter the movie number: ";
        cin >> movieCode;
        Movie m = movies.getMovie(movieCode);
        if(m.getTitle().length() > 0)
        {
            cout << m.toString() << "\n";
        }
        else
        {
            cout << "\n Movie not found!\n\n" << endl;
        }
    }
    else if (ant =1)
    {   
        cout << "Please enter a keyword or title of the movie: ";
        cin >> key;
        Movies tester; // No default constructor error over here 
        tester.Test(key);
    }
    else 
    {
        cout<< "invalid entry please try again";
    }
    cout<< "Would you like to continute the Movie search?";
    cin>> answer;
}

}
4

2 に答える 2

3

エラーは、発生する可能性があるため明らかです。デフォルトのコンストラクターはありません。参考までに、デフォルトのコンストラクターは、引数なしで呼び出すことができるコンストラクターです。

Movies tester;

デフォルトのコンストラクターを呼び出そうとします。デフォルト以外のものを定義したMovies(string);ので、コンパイラはデフォルトのものを生成しなくなりました。

于 2013-02-01T16:00:37.497 に答える
3

testerデフォルトのコンストラクターで宣言しようとしていますMovie movies[1000]が、デフォルトのコンストラクターを使用していますが、クラスにデフォルトのコンストラクターはありません。

testerデフォルトのコンストラクターの引数を指定するか、定義する必要があります。

配列については、デフォルトのコンストラクターを定義して機能する場合でも、オブジェクトに直接格納される配列を使用しないことをお勧めします。これは、オブジェクトが非常に大きいためです(予期しないスタックオーバーフローで驚かれる可能性があります)。使用するstd::vectorと、複数の問題に対処できます。

于 2013-02-01T16:01:01.797 に答える