//student,h
#ifndef STUDENT_H
#define STUDENT_H
class student
{
public:
void display()
{
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
}
void set_value();
private:
int num;
string name;
char sex;
};
#endif
//student.cppp
#include "student.h"
void student::set_value()
{
int n
string na;
char s;
num=n;
strcpy(name,na);
strcpy(sex,s);
}
//main.cpp
#include<iostream>
using namespace std;
#include "student.h"
int main()
{
student stu(98,zhangming,man);
cout<< stu.display()<<endl;
return 0;
}
用devc++编译的,新建里面是创建的类,想定义头文件,包含成员函数定义的源文件和包含主函数的源文件,为什么编译之后显示源文件未编译。谢谢大家
在你提供的代码中,有一些错误导致编译无法成功。以下是修复后的代码示例:
// student.h
#ifndef STUDENT_H
#define STUDENT_H
#include <iostream>
#include <string>
class Student
{
public:
void display();
void set_value(int n, const std::string& na, char s);
private:
int num;
std::string name;
char sex;
};
#endif
// student.cpp
#include "student.h"
void Student::display()
{
std::cout << "num: " << num << std::endl;
std::cout << "name: " << name << std::endl;
std::cout << "sex: " << sex << std::endl;
}
void Student::set_value(int n, const std::string& na, char s)
{
num = n;
name = na;
sex = s;
}
// main.cpp
#include <iostream>
#include "student.h"
int main()
{
Student stu;
stu.set_value(98, "zhangming", 'm');
stu.display();
return 0;
}
修复后的代码中,我进行了以下更改:
student
改为 Student
,按照惯例类名应使用大写字母开头。student.h
头文件中添加了必要的头文件引用,如 <iostream>
和 <string>
。set_value
函数的参数类型和参数传递方式,使其能正确接收参数。main.cpp
中创建了 Student
对象 stu
,并调用了相应的函数。请确保以上代码按照正确的方式保存,并使用 Dev-C++ 编译器进行编译。
1、在DevC++的主界面上方找到工具(T)选项卡,如下图所示:
2、点击工具选项卡,选择编译选项,如图所示:
3、在新打开的编译器选项的窗口中,选择代码生成/优化、连接器标签,可以看到产生调试信息一栏为NO,将其改为YES再保存即可。如图所示:
可以看到,在单步调试的时候产生的控制台窗口闪退的问题就是因为没有打开产生调试信息的选项而造成的,打开就好。
对于封装和信息隐藏,可以通过将数据成员和成员函数设置为private,在类的外部无法直接访问和修改,需要通过公共成员函数来实现。示例代码如下:
class MyClass {
private:
int data;
void privateFunc() {
// do something
}
public:
void setData(int newData) {
data = newData;
}
int getData() const {
return data;
}
void publicFunc() {
// do something
}
};
对于多文件结构,可以将类的声明放在头文件中,成员函数的定义作为另一个源文件,主函数的源文件中包含头文件即可。示例代码如下:
MyClass.h:
class MyClass {
private:
int data;
void privateFunc();
public:
void setData(int newData);
int getData() const;
void publicFunc();
};
MyClass.cpp:
#include "MyClass.h"
void MyClass::setData(int newData) {
data = newData;
}
int MyClass::getData() const {
return data;
}
void MyClass::privateFunc() {
// do something
}
void MyClass::publicFunc() {
// do something
}
main.cpp:
#include "MyClass.h"
int main() {
MyClass obj;
obj.setData(10);
int result = obj.getData();
obj.publicFunc();
return 0;
}
对于源文件未编译的问题,需要在编译器中设置确保所有源文件都被编译。可以检查编译器的设置,确保产生调试信息选项已经设置为yes。如果仍然存在问题,可能是由于编译器版本过旧或不兼容,需要更新或更换编译器。