拆分类c ++

时间:2016-04-22 21:14:26

标签: c++ class split

我在过去几天遇到了问题。

首先,我有一个我做过的项目。但是现在我要把它分开了。

这里是我如何拆分类(一个类作为例子):

标题文件:

#ifndef QUESTION_H
#define QUESTION_H
#include <string>
#include <iostream>
#include <fstream>
#include "Answer.h"
using namespace std;

// Name -- hold a first and last name
class Question {
protected:
   string type;   // Type of the question, e.g MC or TF
   string text;   // Text of the question
public:
   // Default constructor
   Question ();

   // Getters and setters
   string getType();
   string getText();
   void setType (string t);
   void setText (string t);

   // displayText -- Display the text of the question, unformatted at present
   void displayText();

   // Template pattern -- algorithm in parent which does its work calling child methods
   virtual void displayAnswers();
   virtual void display ();

   // Virtual pure functions that must be implemented by each derived class

   virtual int grade (Answer*);              // grade a given answer
   virtual Answer* readAnswer(istream &);     // read a user's answer
};

#endif

好的,现在这里是实施:

#include "Question.h"
#include <string>
#include <iostream>
#include <fstream>
using namespace std;

   Question::Question () { type = ""; text = ""; }

   // Getters and setters
   string Question::getType() { return type; }
   string Question::getText() { return text; }
   void Question::setType (string t) { type = t; }
   void Question::setText (string t) { text = t; }

   // displayText -- Display the text of the question, unformatted at present
   void Question::displayText() {
      cout << text;
   }
   // Template pattern -- algorithm in parent which does its work calling child methods
   void Question::displayAnswers(){ }// Require derived classes to implement
   void Question::display () {   
     Question::displayText();
     Question::displayAnswers();   // Call derived class's displayAnswers 
   }

   // Virtual pure functions that must be implemented by each derived class

   int Question::grade (Answer*){ return 0; }              // grade a given answer
   Answer* Question::readAnswer(istream &){ return 0; }    // read a user's answer

好的,所以我以同样的方式完成了其他课程。

现在剩下的是MakeFile,现在是:

project: Question MCQuestion TFQuestion Answer IntAnswer CharAnswer Main
    g++ -std=c++11 Question MCQuestion TFQuestion Answer IntAnswer CharAnswer Main -o project
.cc.o:
    g++ -std=c++11 -c <−o@

现在,当我尝试运行make时,会显示以下消息:

g++     Question.cpp   -o Question
/usr/lib/gcc/i586-suse-linux/4.7/../../../crt1.o: In function `_start':
/home/abuild/rpmbuild/BUILD/glibc-2.17/csu/../sysdeps/i386/start.S:113: undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [Question] Error 1

有人可以解释一下吗?或者我做错了什么?

感谢。

编辑:

Main.cc:

#include <iostream>
#include <fstream>
#include <string>
#include "Question.h"
#include "MCQuestion.h"
#include "TFQuestion.h"
#include "Answer.h"
#include "IntAnswer.h"
#include "CharAnswer.h"
#include <vector>
using namespace std;


int main () {
   vector<Question *> questions;         // Holds pointers to all the questions
   ifstream infile ("questions.txt");    // Open the input file
   int totalCorrect = 0;                 // Initialize the count from number of correct answers

   // Read each question and place it into the questions vector
   string questionType;
   while ( getline (infile, questionType) ) {
      if (questionType == "MC")  {               
         MCQuestion *mc = new MCQuestion();
         mc->read(infile);    
         questions.push_back(mc);
      }
      else if ( questionType[0]  == 'T' or questionType[0] == 'F' ) {
         TFQuestion* tf = new TFQuestion();
         tf->read(infile);
         tf->setAnswer(questionType[0]);
         questions.push_back(tf);
      }
      else {
         cout << "Input file is corrupt. Expected to find MC, T or F; found \"" << questionType << "\" instead." << endl;
      }
   }
   infile.close();

   // Pose each question, read and grade answers, tally total

   int questionNo = 0;
   for (auto &question: questions) { 

      // Pose the question
      questionNo++; cout << questionNo << ".  ";
      question->display();

      // Get the user's answer
      Answer* ans = question->readAnswer(cin);

      // Grade it and increment total
      int correct = question->grade(ans);
      totalCorrect = totalCorrect + correct

      // Inform the user as to whether or not they got the question correct
      cout << "Your answer was " << (correct?"":"not ") << "correct\n" << endl;

   }

   // Print the overall score
   cout << "Your overall score is " << totalCorrect << "/" 
        << questions.size()  << endl;

   return 0;

}

1 个答案:

答案 0 :(得分:2)

您创建Makefile时遇到很多错误:

应该是这样的:

project: Question.o 
    g++ -std=c++11 $^ -o $@

.cc.o:
    g++ -std=c++11 -c $< -o $@

以类似的方式将其他依赖项添加到project中,不要忘记在某些main文件中定义.cc函数。