在c++程序中使用头文件

Using header file in C++ program

本文关键字:文件 c++ 程序      更新时间:2023-10-16

我有一些关于用头文件编码c++程序的问题。

这是我的头文件:

#include <iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(double width, double length);
double get_perimeter();
double  get_area();
void resize(double factor);
private:
double width;
double length;
double area;
double factor;
};

这是我的Question1.cpp文件,它存储了所有的方法:

#include <iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(double width, double length)
{
    width = width;  //I have no idea how to use this.something as its in Java
    length = length; //Problem probably occurs at here
}
double Rectangle::get_perimeter()
{
    return ((width * 2) + (length * 2)) ;
}
double Rectangle::get_area()
{
    return (width * length);
}
void Rectangle::resize(double factor)
{ 
    width *= factor;
    length *= factor;
}
private:
double width;
double length;
double area;
double factor;
};

最后,这是我的主要方法。

#include <iostream>
#include "header.h";
using namespace std;
int main()
{
Rectangle rectangle1(2.5,7.0);
cout << rectangle1.get_perimeter();
cout << rectangle1.get_area();
system("PAUSE");
return 0;
}

然而,当我尝试运行程序时,系统告诉我有构建错误和未解决的外部,我不知道为什么会这样。有人能帮我修一下吗?

您的实现不应该看起来像

class Rectangle
{
public:
Rectangle(double width, double length) { .... }

但像

Rectangle::Rectangle(double width, double length) : width(width), length(length) {}

您需要在实现.cpp文件和任何需要定义Rectangle类的文件中包含header.h。您还需要在头文件中包含警卫。并且不要将using命名空间std放在头文件中。事实上,不要把它放在任何地方。

将.h改为->

#include <iostream>
using namespace std;
class Rectangle
{
public:
    Rectangle(double width, double length);
    double get_perimeter();
    double  get_area();
    void resize(double factor);
private:
double width;
double length;
double area;
double factor;
};

#include <iostream>
#include "header.h"
using namespace std;

Rectangle::Rectangle(double width, double length)
{
    this->width = width;  //I have no idea how to use this.something as its in Java
    this->length = length; //Problem probably occurs at here
}
double Rectangle::get_perimeter()
{
    return ((this->width * 2) + (this->length * 2)) ;
}
double Rectangle::get_area()
{
    return (this->width * this->length);
}
void Rectangle::resize(double factor)
{ 
    this->width *= factor;
    this->length *= factor;
}

这应该可以工作。问候,卢卡

这里有几件事需要澄清。

1)使用this->width,相当于java的this.width(在c++中,这是一个指针)。实际上,一些c++程序员(包括我)用m_作为成员变量的前缀。那么你可以直接写m_width = width

2)在Question1.cpp的顶部包含"header.h"

3)避免把"using namespace std"放在头文件中,否则你可能会得到意想不到的命名空间随着代码的扩展而发生冲突。可以把它放在单独的源文件中,尽管有些人甚至不赞成这样做。

4)根据你的编译器和链接器,你需要链接到iostream库使用的各种库。如果你告诉我们你正在使用的编译器,我们可以在这里帮助你。

5)你需要用

包围你的页眉
#ifndef ARBITRARY_TEXT_BUT_DISTINCT_FROM_ANY_OTHER_IN_YOUR_PROGRAM
#define ARBITRARY_TEXT_BUT_DISTINCT_FROM_ANY_OTHER_IN_YOUR_PROGRAM
...your code here
#endif

这是一个include保护-帮助防止多个头文件内容的包含。

在Question1.cpp中你必须包含header.h

别忘了在header.h

中加入保护符

同样在Question1.cpp中你必须修改

Rectangle(double width, double length)

Rectangle::Rectangle(double width, double length)

您需要告诉您的构建系统编译"question1.cpp"。通常在"文件"下面有一个"将现有文件添加到项目"菜单项。

通常,您的类和构造函数将使用与输入参数不同的名称。许多人在开头加前缀(mLength, illength)或在结尾加后缀(length_很常见)。

另一种解决方案是用this->length作为成员变量的前缀,但这可能会在一段时间后变得相当混乱。

在.cpp文件中应该只实现方法而不重写完整的类实现的大错误尝试以下在.cpp文件

矩形::矩形(双宽,双长){宽度=宽度;//我不知道如何使用它。就像在Java中一样长度=长度;//问题可能发生在这里}不要在类{}中包含方法;块,不要重新定义成员变量另外,不要忘记在.cpp文件

中包含头文件。

谢谢

我想知道你是否得到链接器错误,因为你的cpp文件有点奇怪

在cpp文件中包含。h文件,并且只实现像

这样的函数
Rectangle::Rectangle(double width, double length){
 //implement
}
double Rectangle::get_perimeter(){
 //implement
}
double Rectangle::get_area(){
  //implement
}
void Rectangle::resize(double factor){
  //implement
}

当你想把你的类文件分成*.cpp和*.h文件时,它总是有以下形式:

rectangle.h:

#ifndef __RECTANGLE_H_
#define __RECTANGLE_H_
#include <iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(double width, double length);
double get_perimeter();
double  get_area();
void resize(double factor);
private:
double width;
double length;
double area;
double factor;
};
#endif

现在矩形。cpp应该有以下形式:

#include <iostream>
#include "rectangle.h"
using namespace std;
Rectangle(double width, double length)
{
    width = width;  //I have no idea how to use this.something as its in Java
    length = length; //Problem probably occurs at here
}
double Rectangle::get_perimeter()
{
    return ((width * 2) + (length * 2)) ;
}
double Rectangle::get_area()
{
    return (width * length);
}
void Rectangle::resize(double factor)
{ 
    width *= factor;
    length *= factor;
}

so when作为解释:头文件告诉您哪些字段和方法可用,*.cpp文件实现这些方法。

在你的main.cpp中你只需要包含rectangle.h

下面的代码可以工作

#include<iostream>
#include<iomanip>
using namespace std;
class student
{
private:
int area;//hours;
float perimeter;//gpa;
public:
void addcourse(int len, float wid)
{
float sum;
sum = area * perimeter;
area += len;
sum += wid * len;
perimeter = sum / area;
}
student()   // constructor
{
area = 0;
perimeter= 0.0;
}
};

int main()
{
student s;
int length;//classhours;//l
float width;//classgpa;//w
cout << "Enter length ( 1 to end):  ";
cin >> length;
while(length !=  1)
{
cout << "Enter width:  ";
cin >> width;
s.addcourse(length, width);
cout << "Enter length ( 1 to end):   ";
cin >> length;
}
// cout << "Rectangle's length = " << r.getlength() << endl;
//    cout << "Rectangle's width = " << r.getwidth() << endl;
//    cout << "Rectangle's area = " << r.getarea() << endl;
//   cout << "Rectangle's perimeter = " << r.getperimeter() << endl;
}