首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的类函数在main中是“未定义的”?我在代码中遗漏了什么吗?

在代码中,当你的类函数在main函数中被调用时出现“未定义的”错误,通常是因为你没有正确定义或实现该类函数。

可能的原因和解决方法如下:

  1. 类函数未正确定义:请确保你在类的声明中正确定义了该函数,并在类的定义外部实现了该函数。例如,如果你的类名为MyClass,函数名为myFunction,则应在类的声明中添加函数原型:void myFunction();,并在类的定义外部实现该函数:void MyClass::myFunction() { // 函数实现 }
  2. 类函数未正确命名:请确保你在类的声明和定义中使用相同的函数名,并且函数的参数列表和返回类型也要一致。
  3. 类函数未正确调用:请确保你在main函数中正确调用了该类函数。如果该类函数是一个成员函数,则需要通过类的对象来调用,例如:MyClass obj; obj.myFunction();。如果该类函数是一个静态函数,则可以直接通过类名来调用,例如:MyClass::myFunction();
  4. 类函数未正确包含:请确保你在main函数中正确包含了定义该类的头文件。如果你的类定义在一个单独的头文件中,需要在main函数中使用#include指令包含该头文件。
  5. 类函数未正确链接:如果你的类函数定义在一个单独的源文件中,需要确保将该源文件与main函数所在的源文件进行链接。可以通过将两个源文件一起编译并链接,或者将类函数的实现放在头文件中进行解决。

总结起来,当类函数在main函数中出现“未定义的”错误时,需要检查类函数的定义、命名、调用、包含和链接等方面是否正确。如果以上步骤都正确无误,那么可能是其他代码逻辑或编译环境的问题,需要进一步排查。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

我是这样在 React 中实践 TDD 编程的

在Redux中编写测试听起来肯定有悖直觉。如果你使用了Redux,它可能看起来更加复杂。 然而,在添加功能之前编写测试有助于编写更好的代码,因为你预先考虑了将使用的设计模式、体系结构和变量的名称。...slice的默认状态应该是一个空数组,毕竟,我们处理的是用户。 让我们通过编写一个测试: 在src/store中创建一个名为slices的新目录。...在这个目录中,添加一个名为user.test.js的文件。这个文件将包含我们将为userSlice编写的测试。 第一个测试是确保存储是空的或未定义的。...thunk是一个函数,它以store的dispatch方法作为参数,然后在API或副作用完成后使用它来dispatch同步操作。 首先,让我们为这个特性编写测试。...我们是: 在进行更新之前,保存以前的状态并将users属性修改为预期状态。

1.9K30

为什么String在Java中是不可变的

String 在 Java 中是不可变的。 不可变类只是一个无法修改其实例的类。 创建实例时,将初始化实例中的所有信息,并且无法修改信息。 不可变类有许多优点。...本文总结了为什么 String 设计为不可变的。 这篇文章从内存,同步和数据结构的角度说明了不变性概念。 1. 字符串池 字符串池(String intern pool)是方法区域中的特殊存储区域。...创建字符串并且池中已存在该字符串时,将返回现有字符串的引用,而不是创建新对象。 以下代码将在堆中仅创建一个字符串对象。...如果字符串是可变的,则使用一个引用更改字符串将导致其他引用的错误。 2. 缓存的哈希码 字符串的哈希码经常在 Java 中使用。 例如,在 HashMap 或 HashSet 中。...在String类中,它具有如下代码: private int hash;//this is used to cache hash code. 3.

1.3K20
  • java 为什么 String 在 java 中是不可变的?

    为什么 String 在 java 中是不可变的?String 在 java 中是不可变的,一个不可变类意味着它的实例在创建之后就不可修改,实例的所有属性在创建时初始化,之后无法对这些属性进行修改。...不可变类型有着许多的优点,这篇文章总结了 为什么 String 被设计成不可变的,文章将从内存、同步和数据结构的角度说明不变性概念。...在 String 类源码中有如下的代码: 代码解读复制代码 /** Cache the hash code for the string */ private int hash; // Default...如果 String 是可变的,那么它的 value 可以被改变,但这违反了 Set 的设计原则(Set 中的元素是不能重复的),当然,上面的例子仅仅为了表明意图,String 类中并不存在 value...总结,String 被设计为 final 的原因是 效率 和 安全,通常情况下这也是为什么不可变对象在许多设计中会成为首选的原因。

    8510

    在没有DOM操作的日子里,我是怎么熬过来的(中)

    假如你果真碰到这个类似的问题,可以考虑先将项目中的node_modules删除掉,然后重新cnpm install安装项目所需的依赖。通常这个情况,就会迎刃而解(不要问为什么,这可能是个偏方)。...说到组件,在项目中,你可能会看到公司前辈写的组件代码,都是以 .vue 为后缀的文件,打开后你会发现它的整体结构分三层,分别定义了三个 tag标签,template,script,style。...然后对应的代码在自己的标签里面各司其职,所有需要的html、css、javascript都在里面。...接下来我想谈谈vue的生命周期和钩子函数。 每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如需要设置数据监听、编译模板、挂载实例到 DOM、在数据变化时更新 DOM 等。...开发的时候,写好data 剩下的事情就是 通过异步请求来交互data,UI层绑定事件改变data,在组件间传递data。 后记 在这个MVVM横行的时代,我已经渐渐的忘却了jQuery的存在。

    1.6K110

    nextline函数_在JAVA中Scanner中的next()和nextLine()为什么不能一起使用?

    大家好,又见面了,我是你们的朋友全栈君。...对于 “” 的情况分析: 在输入 2 的时候调用的是 nextInt返回:nextInt 返回的是结束符之前的内容,并不会返回结束符 我们的输入:2 \r 以回车 ( \r ) 结尾,于是 2 被返回,...回车符 “\r” 它被丢弃在缓冲区中,现在缓冲区中,只有一个 \r ,于是 下一次 nextLine 扫描的时候就又扫描到了 \r,返回它之前的内容,也是啥都没有 “” ,然后再把 \r 去掉, 对于...这个扫描器在扫描过程中判断停止的依据就是“结束符”,空格,回车,tab 都算做是结束符 而坑点在于 next 系列的,也就是下面这些函数:next nextInt nextDouble nextFloat...这些函数与 nextLine 连用都会有坑 坑点就是 next 系列的函数返回了数据后,会把回车符留在缓冲区,因此我们下一次使用 nextLine 的时候会碰到读取空字符串的情况 解决方案:输入都用

    2.7K10

    为什么在深度学习中,AlphaGo Zero是一个巨大的飞跃?

    Mathew Broderick扮演的角色在电影中问道:“有没有什么办法可以让它自己玩?” ?...AlphaGo Zero是DeepMind的自动操作系统的最新化身。有人可能会认为,在围棋中击败人类世界冠军是很难的。...然而,在这里,每一个训练集都是全新的,而且越来越具有挑战性。它也类似于课程学习,然而课程是在算法中固有的。训练集是自生成的,目标函数的计算是由蒙特卡罗树搜索(MCTS)的结果推导而来的。...在像围棋这样的深度学习中,你不能在纸上取得胜利,你必须要实际操作才能知道谁赢了。简而言之,无论一个简单的想法是什么,你都不会体会到它到底有多好,除非你去实际运行它。...我发现,在使用较少的训练数据的同时,开发利用的搜索机制能够创造性地发现新策略。这是很奇怪的,就好像是自我对弈在回馈自己,并让自己更好地学习。

    96380

    你知道Java中final和static修饰的变量是在什么时候赋值的吗?

    那就意味着只有static修饰的类变量才会在class文件中对应的字段表加上ConstantValue属性吗? 答案是否定的。...首先,这个问题的本身就问的不太准确。 我理解这位朋友真正想问的是“为什么private final a = 10也可以通过ConstantValue属性的形式赋值?” 我觉得这是一个很好的问题。...最后他发现和书中冲突,于是提出了上文的这个问题。 这位朋友的思路有问题吗?我觉得是没有问题的。 不过这样的理解是对的吗?显然是不对的。 因为虚拟机规范是这样规范的。...对于非静态字段,ConstantValue属性是不会生效的。 至于为什么要这样设计,功力不够的我暂时无法理解设计者的想法。 那单独用final修饰的实例变量到底是在什么时候赋值的呢?...网上的博客不都是在类加载的准备阶段会对普通类属性赋初始值,对带有ConstantValue的类属性直接赋值吗? 《深入理解Java虚拟机》也是这样说的啊? 书上是错的吗?

    1.8K20

    你知道在iOS开发的工作中为什么有人4k有人40k吗?

    多写就没什么好说了,没有写过几十万行代码是不能算熟悉一门语言的。...多思考和讨论这个需要个人主动一些,遇到问题喜欢多问为什么,在多次重构和思考的过程中,我们就会慢慢积累出一类问题的 “最佳实践” 方式,成为自己宝贵的经验。   ...在我看来,任何一件事情,如果你做到了热爱它,把它当作乐趣,那么在同行中做到出类拔萃应该是理所当然的。如果不热爱,我感觉做到会比较难。   ...多写就没什么好说了,没有写过几十万行代码是不能算熟悉一门语言的。...多思考和讨论这个需要个人主动一些,遇到问题喜欢多问为什么,在多次重构和思考的过程中,我们就会慢慢积累出一类问题的 “最佳实践” 方式,成为自己宝贵的经验。

    2.8K90

    创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法?

    } } 问题:为什么创建A对象的时候父类会调用子类方法?...但是:创建B对象父类会调用父类的方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...如果,子类重写了父类的方法,子类的方法引用会指向子类的方法,否则子类的方法引用会指向父类的方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...但是:由于java语言是静态多分派,动态单分派。其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。...} } 看一下上边的代码,是不是恍然大悟?

    6.2K10

    一个线上问题让我发现了Calendar类中的秘密-周一真的是每周的第一天吗?

    就在这时,组长找上了我,告诉我节前的这个需求有问题:今天明明才周日,但是未完成的业务已经查询出来了,应该到了周一才能找出来才对。本来我是十分自信的,毕竟这么简单的需求,我还不能把它拿捏了吗?...这就让人感觉很奇怪了,看起来获取日期那里也没什么问题,毕竟是很简单的逻辑。...那么只能往更深层次看,于是点进Calendar相关的源码发现了其中的秘密:在Calendar类中,周日被默认为每周的第一天,周一为每周的第二天。...那么回到我们上面的代码,问题的原因就水落石出了:今天是周日,在周日这天获取的本周一自然就是明天,在我们看来就是获取到了下周一,这里程序逻辑上没问题,但与我们实际场景使用逻辑相悖,因此针对周日需要特殊处理下...获取本周的周一 Date monday = DateUtil.beginOfWeek(date);四、小结也算是一次比较有意思的排错,但是也提醒我们日常开发中无论是使用JDK自带的类库还是开源的工具类

    8510

    为什么Java中类的成员变量不能被重写?成员变量在Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

    这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量在Java中能够被重写么?...Paste_Image.png 按照我们已有的多态的概念,第二个应该是输出sub才对,但却输出了super。这是为什么呢?...意思就是: 在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。...而是,必须从父类的引用获得父类被隐藏的成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读。...访问隐藏域的方法 就是使用父类的引用类型,那么就可以访问到隐藏域,就像我们例子中的代码 就是使用类型转换System.out.println(((Super)c1).s); 翻译自http://www.programcreek.com

    3.5K40

    头文件是必须的吗?跟一跟编译过程~~~

    而且这也是头文件存在的必要之处,即,但凡我想在当前源文件中使用其他源文件中的函数、变量,甚至是其他库、系统的函数,我只需要#include相关头文件即可。...这相当于: main.cpp中首先添加了func()函数声明,然后在main()函数中调用了func()。 func.cpp中也添加了func()函数声明,同时给出了func()函数的定义。...而且上面的测试我在main.cpp中删掉了func()声明,就等于在main.cpp中删掉#include。所以可以认为“没有预处理过程”(实际上是有的,因为预处理过程还负责生成行号等等职责)。...显然,main.o中引用但未定义的func()被链接器在func.o中找到了。...本文只是就着这个问题,跟了下编译的过程,看看平常开发过程中遇到的编译报错“未定义的引用”、“未声明的变量”这些错误来源是哪原因是什么。

    2.2K10

    阿里社招面经 (已拿 offer)

    事件循环说一下(面试题:说说事件循环机制(满分答案来了)) JS有几种基本类型,分别是什么,与对象的区别 JS 执行过程中是如何保存上下文的(建议看看极客时间的《浏览器工作原理》) 你认为什么是前端 为什么想来阿里...最近在看什么书 微前端了解吗 你想成为什么样的人(个人成长规划) 项目中遇到的最大挑战是什么,如何解决的 node 大量日志怎么处理的(缓冲队列/采样率降低等) http2 的特点(「知识拾遗」 ...(网页录屏(帧记录)调研总结) 链路录屏法务问题如何解决 FMP 定义及统计,w3c的草案你知道吗 react 项目的可持续维护性如何体现 react hooks用过吗,为什么要用 h5 和小程序有什么区别...https加密原理,中间人攻击知道吗(「知识拾遗」你应该知道的 https) ng 负载均衡的方式有哪些 CDN 有什么作用 不可变数据里面,immutable,删除数组里面的列表(https...://juejin.im/post/5b9b30a35188255c6418e67c, https://juejin.im/post/5e6a14b1f265da572978a1d3) 垃圾回收中,内部函数返给上层的对象是如何管理的

    1.9K20

    如何让matlab心甘情愿地做你的文件搬运工

    真的是这样吗?“小编,我想用matlab批量创建文件夹!”、“小编,我想用matlab把那张照片移到我指定的文件夹中”、“小编,那个文件我看着不顺眼,用matlab怎么删除呀?”,.........dir 列出文件夹内容:让你对文件夹内容一目了然 ls 列出文件夹内容:楼上的老哥,稳呀! pwd 确定当前文件夹:我只注重当下! isfile 确定输入是否为文件:是文件吗?我是小花。...isfolder 确定输入是否为文件夹:是文件夹吗?我是小草。 exist 检查变量、脚本、函数、文件夹或类的存在情况:存在即合理! what 列出文件夹中的 MATLAB 文件:what?...which 定位函数和文件:我就是matlab的GPS。 cd 更改当前文件夹:改变,从当前开始! type 显示文件内容:我能看透你的心!信吗!...fileattrib 设置或者获取文件或文件夹的属性:属性是神马? open 在合适的应用程序中打开文件:芝麻开门!

    99020

    论类型转换导致 JVM 类加载提前报错的问题

    作者在文章中描述了一个包含Father和Son类的情景,并展示了一段代码,验证了删除Son类后仍会导致报错的情况。...题目是这样的: 在 Java 中有 Father 和 Son 类,其中 Son 继承了 Father 类,两类均有 method 方法,现在 Main 类的 main 方法有如下调用: Father f...然后朋友发来的一张图让我沉默了: 竟然真的会报错,难道 JVM 虚拟机会提前解析并未执行的代码行中包含的类引用吗?不对啊,这和我以前的实践完全不一样,怎么会这样.........(即使在 JVM specs 中这种行为是未定义的,虚拟机实现可以选择立刻解析或是延迟解析) 那么问题出在哪里了呢?经过一番查证,我发现这个报错其实是在 JVM 类加载的验证阶段产生的。...在对 Main.class 类的加载过程中,对于 Father f = new Son(); 和 f.method();,产生了一个包含向上类型转换的多态函数调用,对于这种调用,JVM 虚拟机会试图进行校验

    9910

    C++程序编译之谜(一)——多文件编译的奇怪现象

    1、奇怪的现象 在C++多文件编译的时候,很多人都会经常碰见这样的一种情况,在一个cpp文件中调用另一个cpp文件的函数,那么可以直接调用吗?我们来做个试验。...main.cpp文件中直接调用cal.cpp中的函数方法可以吗?...千万不要觉得说肯定是他们漏复制了什么,漏了函数声明什么的,这些都不是原因。那么是什么原因呢? 2、真正的原因 真正的原因是IDE在搞鬼!...那么我们再回到开头的那个问题,为什么有些人可以正确的输出不会报错,而有些人却会报错呢?...首先我猜测他们都是在window平台执行的,并且是用IDE来编译的,而不同的IDE功能都各不相同,有些IDE非常的智能,它可能会根据在main文件中导入的h文件自动去寻找对应的cpp文件,比如像上面我在

    25010

    为什么C语言会有头文件

    前段时间一个刚转到C语言的同事问我,为什么C会多一个头文件,而不是像Java和Python那样所有的代码都在源文件中。...add(1, 2); return 0; } 在这个例子中我们在add.cpp文件中先定义一个add函数,然后在main文件中先包含这个源代码文件,然后在main函数中直接调用add函数,项目的目录结构如下...然后在main文件中定义这个宏,表示在main中不包含它的实现,但是不管怎么样都需要在add.cpp中加上add函数的定义,否则在调用add函数时会报add函数未定义的变量或者函数 上述写法的窘境 上面只引入一个文件...其实针对所有的变量、类、函数可以都在统一的头文件中声明,但是这么做又带来一个问题,如果我要看它的实现怎么办,那么多个文件我不可能一个个的找吧。...这样就解释了为什么在声明时指定变量类型,如果编译器不知道类型就不知道该用什么指令来替换C代码。同时会将对应的变量名作为符号保留。

    2.2K50

    深度刨析C语言中的动态内存管理

    1.为什么会存在动态内存分配 截至目前,我们已经掌握了两种内存开辟的方式了: 单个变量的创建 数组的创建 int a = 10;//在栈空间开辟4个字节 int arr[10] = {0};//在栈空间开辟了...返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候,使用者自己来决定 如果参数size为0,malloc的行为是标准未定义的,这取决于编译器,所以不要传0作为参数...在test函数中我们创建了一个str指针指向NULL,然后就直接把指针变量传入getmemory函数中,这里的传参是传值调用,对p的修改是不会影响到str的也就造成了,在strcpy函数中对NULL指针解引用的错误...4.代码段:存放函数体(类成员函数和全局函数)的二进制代码 有了这幅图,我们就能更好的理解在《C语言篇章》中讲的static关键字修饰的局部变量的例子了。...1和代码2都是可以完成相同的功能的,都是代码1的实现有两个好处: 好处1:方便内存释放 如果我们的代码是在别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。

    6710

    Python异常

    当程序遇到无法处理的错误时,就会抛出异常,并在控制台输出相关的错误信息,包括异常类型、错误描述以及错误发生的位置。二、捕获异常为什么要捕获异常呢?...(e)输出结果:出现变量未定义或者除以0的异常name 'name' is not defined仔细观察这个输出结果,为什么会输出name 'name' is not defined但是不会输出division...这是因为在Python中捕获多个异常时,try 块中的代码是自上而下执行的,一旦遇到异常,程序会立刻跳转到相应的 except 块,后续的代码将不再执行。...def main(): func2()main()运行结果:利用异常具有传递性的特点,在main函数中设置异常捕获便可保证程序不会因为异常崩溃。...因为整个程序无论在哪里发生异常,异常最终都会传递到main函数中,进而确保所有的异常都会被捕获。

    5711
    领券