在c++程序中使用头文件
Using header file in C++ program
我有一些关于用头文件编码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;
}
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到