c ++期望的类型说明符' ...'令牌例外

时间:2016-01-14 19:35:32

标签: c++ exception

我有这个代码,它给了我这个错误:

  

在' ToolongString'之前的预期类型说明符令牌。

#include <iostream>
#include "student.h";
#include <exception>

using namespace std;

int main()
{
    student stud1;
    int a,b;
    string c,d;
    cout<<"Enter the First Name"<<endl;
    cin>>c;
    try
    {
        stud1.setFirstName(c);
        cout<<"Family Name: "<<stud1.getFirstName()<<endl;
    }
    catch (ToolongString ex1)//error
    {
        cout<< ex1.ShowReason() <<endl;
    }
     return 0;
  }

这是TooLongString类:

class ToolongString{
public:

    char *ShowReason()
    {
        return "The name is too long";
    }

};

我有这样的班级学生的头文件:

#ifndef STUDENT_H
#define STUDENT_H
#include <string>
#include <iostream>


using namespace std;

class student
{

 public:
    student();
    virtual ~student();
    int studentId,yearOfStudy;
    string firstName,familyName;

    void setFirstName(string name);
    void setFamilyName(string surname);
    void setStudentId(int id);
    void setYearOfStudy(int year);
    string getFirstName();
    string getFamilyName();
    int getStudentId();
    int getYearOfStudy();
    };
    #endif /

在student.cpp文件中,我有其他例外情况。

1 个答案:

答案 0 :(得分:1)

也许试试这个

#include <iostream>
using namespace std;

class ToolongString{
public:

    char const *ShowReason()  // Changed return type to const
    {
        return "The name is too long";
    }

};

int main()
{
    string c;
    cout<<"Enter the First Name"<<endl;
    cin>>c;
    try
    {
        if (c.length() > 10) throw(ToolongString()); // Max 10 chars allowed or it throws

        cout<<"Family Name: "<<c<<endl;  // Okay - print it
    }
    catch (ToolongString& ex1)   // Change to & (reference)
    {
        cout<< ex1.ShowReason() <<endl;
    }
}

在ideone.com上试用 - http://ideone.com/e.js/uwWVA9

修改 由于评论

您不能将班级ToolongString放在student.cpp中。您必须在student.h中声明/定义它,以便编译器在编译main时知道它。把课程改为student.h。

编译每个cpp文件时不知道其他cpp文件的内容。因此,您必须为编译器提供编译cpp文件所需的所有信息。这是通过在h文件中声明事物(类)然后包含相关的h文件来完成的。实现可以保存在cpp文件中,但如果您愿意,也可以将实现(类)放在h文件中。

在你的情况下,你需要(至少)告诉编译器你有一个名为ToolongString的类,并且该类有一个名为ShowReason的函数。