问题集--理解编译原理

想把类从主函数文件中分离出来:

编译时出现了undefied refenence to...问题,代码如下:

//main.cpp

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

int main(int argc, char **argv)
{
    Student s1;
    s1.setNum(100);
    s1.display();
    return 0;
}

//student.h

#ifndef STUDENT_H
#define STUDENT_H

class Student
{
private:
    int num;
public:
    void setNum(int n);
    void display();
};
#endif

//student.cpp

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

void Student::setNum(int n)
{
    num = n;
}
void Student::display()
{
    std::cout << num << std::endl;
}

编译时出现以下错误:

如果将student.cpp中的函数放到类中,则不会出错!

//student.h

#ifndef STUDENT_H
#define STUDENT_H
class Student
{
    private:
    int num;
    public:
    void setNum(int n)
    {
        num = n;
    };
    void display()
    {
        std::cout << num << std::endl;
    };

};

#endif

A:student.cpp要添加到当前项目里,和main.cpp一起编译成功以后,才能链接在一起生成目标程序

由于编译时#include宏定义的头文件会全部被替换为源代码进行编译。如果将类代码全部放在.h文件中,由于main.cpp包含student.h头文件,在编译时会将.h头文件替换,再对main.cpp文件进行编译,这样不会出现编译错误!

时间: 2024-08-05 07:06:17

问题集--理解编译原理的相关文章

自己的理解——编译原理中的四种文法

转载请注明来源http://www.cnblogs.com/qjkobe/p/5332612.html,谢谢. 编译原理学文法类型的时候,会出现乔姆斯基给出的四种文法类型,然而,这些概念太过于抽象了,对于初学者实在很难理解,所以,在这里,我给出一些我自己的理解,希望能对大家有所帮助. 在这之前,你必须对终结符和非终结符有所了解,简单来说,非终结符就是这个东西还能→别的东西(→的标准叫法是定义为),但是终结符就不能了,比如说,分子→原子,原子→夸克.夸克就不能再分了,所以不能由其他粒子定义.(随便

关于计算机编译原理

从我个人理解,计算机编译原理,顾名思义,就是关于计算机编程翻译的相关原理,即对计算机编程的,更为深入.更为详细的去解读计算机语言.上网看了许多个人解读编译原理,发现最令我信服的,就是把编译原理类比成人体解剖:只有认真解剖.研究人体各部位,才能在手术中.医治中做到更好的处理.因此,唯有理解编译原理,才能更好地进行计算机的编程等一系列的操作. 博客上有人说到,学习编译原理能够更加容易理解算法之间的关系.能培育自己的观点.提高学习语言的效率.但在我个人看来,学好编译原理,能让我们有一个更强的临时变换的

0909对编译原理的初了解

1.编译原理学什么? "编译原理":研究设计和构造编译程序原理和方法以及主要实现技术.其中蕴含着计算机科学中解决问题的思路.形式化问题和解决问题的方法.通过本课程的学习,使学生掌握编译理论和方法方面的基本知识,同时也获得设计.实现.分析和移植编译程序方面的初步能力. 编译原理(第3版)共10章,内容包括语言及文法的基本知识.词法分析.语法分析.语义分析及中间代码生成.符号表组织.运行时的存储组织与分配.代码优化及目标代码生成等.此外编译原理是一门实践性较强的课程,要联系实际,多看实验参

我对编译原理的看法

在我看来,编译原理是一门比较深奥的一门学科,但毫不疑问,它对于我们来说,是很重要的,它是我们进阶的第一步.首先编译原理是学习编译技术的基本理论和实现技术,从源语言提取需要的信息,把源语言翻译成目标语言,大概就是学习编译器方面的产生原理和技术问题. 编译原理让我们学到编译器构造的基本原理和流程,更重要的是还让我们如何严谨地去思考.编写程序,让我们从中学会更多算法思想,对我们以后的编程很有用. 当如果不学的话,就是不能真真正正的理解编程.不能更进一步. 首先,提高自己对编译原理的学习兴趣,理解编译原

编译原理的理解

编译原理内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成.大一点的应用可以做到一定的技术先进性,从而让你在本行业站稳脚跟:分析和分解用户输入的SQL语句,理解是否有害和是否有SQL注入等.如果不学,对于不是不是本行业的人来说就没损失,如果是本行业的专业人士,不学只会令自己的编译理解更慢.

0909对编译原理的理解

1.编译原理学什么? 编译原理旨在让人们学习编译程序构造的一般原理和基本方法.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成,而且这门课程关注的是编译器方面的产生原理和技术问题.回归到本质上,学习编译原理其实也就是学习一个相对复杂的算法. 2.为什么学编译原理? 编译原理这门课程实际蕴含着计算机学科中解决问题的思路.形式化问题和解决问题的方法,这些思路和方法除了对应用软件和系统软件的设计与开发有一定的启发和指导作用外,在提倡学科的交叉不断创新

对编译原理的理解

编译原理就是什么? 在我看来,编译原理就是将高级语言翻译成计算机语言(即计算机所能识别的二进制代码)所遵循的规律,并且让你理解机器是如何理解高级语言的. 学习编译原理有什么好处? 当你真正完成编译原理的学习后,你对你所写的程序.程序语言都会有更深的本质认识,这样的认识也会让你站的高度完全不同,并且知道编译的过程方法理论,可以为以后学习工作打下基础,而且编译原理并不仅仅是用来写编译器的,还可以在许多意想不到的领域进行应用.如果以后走工程方向的,学好编译原理可以基本囊括所有需要的技术,锻炼脑力,同时

记事本写c#代码编译并理解编译执行原理

1.在记事本里编写c#代码,将文件保存为ProgramTest.cs: namespace huangxiangTestDemo { class ProgramTest { static void Main() { System.Console.WriteLine("hello world"); System.Console.ReadKey(); } } } 2.在控制台编译,使用csc命令编译: 注意完整写法:csc.exe /out:ProgramTest.exe /t:exe /

0909 对编译原理的理解

1.编译原理学什么? 学习编写编译器,将高级语言(自己的代码)翻译成为机器语言. 2.为什么学编译原理? 更好的理解高级语言转化为机器语言,更好的认识编译器原理. 3.怎么学编译原理? 先了解编译原理的相关知识,并找些相关书籍理解,在课外时间多练习.实践,来更好学习编译原理. 4.思考:在没有学习本书理论之前,如果让你写一个编译器,你是什么思路? 在写编译器之前,我们必须先有c语言上有一定的基础.然后在对编译原理上才能学的更好.