将C ++类分成头文件和cpp文件

时间:2015-11-10 19:58:26

标签: c++ class

所以这是我第一次尝试将我的班级分开......但我遇到了一些麻烦。

这是.h文件

#ifndef COURSE_H
#define COURSE3_H
class course3
{
string coursename;
int courseid;
int passinggrade;
int numcredits;
public:
course3( string acoursename, int acourseid, int apassinggrade,int anumcredits );
string getcoursename();
int getcouseid();
int getpassinggrade();
int getnumcredits();
};

这是cpp ......

#include <stdafx.h>
#include <iostream>
#include <string>
#include <course3.h>
using namespace std;
 course3::course3( string acoursename, int acourseid, int apassinggrade,int anumcredits ) //constructors
{
    coursename=acoursename;
    courseid=acourseid;
    passinggrade=apassinggrade;
    numcredits=anumcredits;
}
string course3::getcoursename()
{
    return coursename;
}
int course3::getcourseid()
{
    return courseid;
}
int course3::getpassinggrade()
{
    return passinggrade;
}
int course3::getnumcredits()
{
    return numcredits;
}

 }
我做错了什么?

错误:

  

错误C2146:语法错误:缺少&#39;;&#39;在标识符之前&#39; coursename&#39;

     

错误C4430:缺少类型说明符 - 假设为int。注意:C ++不支持default-int

等等,但接近这些

3 个答案:

答案 0 :(得分:2)

使用#include "course3.h"代替#include <course3.h>。 使用双引号,预处理器将在本地目录中查找标头。使用括号,它将在系统标题中搜索标题。

然后你的包含警卫中有一个拼写错误。如果你不想写#pragma once等,我建议你使用#ifndef...,并冒险犯错(首先检查你使用的编译器是否支持它.VS,GCC自3.4起,Clang等等。)

答案 1 :(得分:2)

你.h文件中的标题保护声明错误,你错过了#endif

#include <string>属于.h文件,因为您在std::string文件中使用.h

如果要在string文件中使用std::string而不是.h,则using语句也必须位于.h文件中。但是你应该学会避免using namespace std;因为它将整个std命名空间转储到全局命名空间中。虽然它确实有效,但它并不是最佳或理想的。如果您不想在使用std::的任何地方指定std::string,那么您至少可以通过using来限制using std::string;语句的范围。

.cpp文件的末尾有一个额外的},不属于那里。

试试这个:

#ifndef COURSE3_H
#define COURSE3_H

#include <string>

class course3
{
    std::string coursename;
    int courseid;
    int passinggrade;
    int numcredits;
public:
    course3( std::string acoursename, int acourseid, int apassinggrade, int anumcredits );
    std::string getcoursename();
    int getcourseid();
    int getpassinggrade();
    int getnumcredits();
};

#endif

#include <stdafx.h>
#include <iostream>
#include "course3.h"

course3::course3( std::string acoursename, int acourseid, int apassinggrade, int anumcredits ) //constructors
{
    coursename = acoursename;
    courseid = acourseid;
    passinggrade = apassinggrade;
    numcredits = anumcredits;
}

std::string course3::getcoursename()
{
    return coursename;
}

int course3::getcourseid()
{
    return courseid;
}

int course3::getpassinggrade()
{
    return passinggrade;
}

int course3::getnumcredits()
{
    return numcredits;
}

或者:

#ifndef COURSE3_H
#define COURSE3_H

#include <string>
using std::string;

class course3
{
    string coursename;
    int courseid;
    int passinggrade;
    int numcredits;
public:
    course3( string acoursename, int acourseid, int apassinggrade, int anumcredits );
    string getcoursename();
    int getcourseid();
    int getpassinggrade();
    int getnumcredits();
};

#endif

#include <stdafx.h>
#include <iostream>
#include "course3.h"

course3::course3( string acoursename, int acourseid, int apassinggrade, int anumcredits ) //constructors
{
    coursename = acoursename;
    courseid = acourseid;
    passinggrade = apassinggrade;
    numcredits = anumcredits;
}

string course3::getcoursename()
{
    return coursename;
}

int course3::getcourseid()
{
    return courseid;
}

int course3::getpassinggrade()
{
    return passinggrade;
}

int course3::getnumcredits()
{
    return numcredits;
}

答案 2 :(得分:0)

上面提供的答案是正确的,但函数getcourseid声明和函数实现的名称中有一个拼写错误