首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >非成员函数的问题

非成员函数的问题
EN

Stack Overflow用户
提问于 2013-08-30 13:46:23
回答 3查看 496关注 0票数 2

我正在处理的一个问题是要求我在类体中定义一个istream构造函数。让我们把全班的声音叫做。现在,这个构造函数在自己的主体中使用一个函数。但是这个函数应该是一个非成员函数。我在另一个文件中定义了它,但是在包含类定义本身的标头中声明了它。我已经将标题放置在包含非成员函数的另一个文件中。

问题是,非成员函数的参数之一具有类型声音,它对类型声音对象执行操作。

当我在头文件中声明这个函数时,如果我把它放在类定义之前,就会得到一个错误,说明对象还没有定义。

当我将声明放在定义之后时,构造函数现在告诉我,它体内的函数是未定义的。

如果我将声明放入类体中,它将成为一个成员函数。

这个问题并没有明确说明我不能让这个函数成为一个成员函数,所以我想知道是否有一种方法可以克服这个捕获-22。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-30 15:54:32

看起来最好的方法是在函数之前为类使用前向声明:

标题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Sound;

void f(Sound s);

class Sound
{...};
票数 1
EN

Stack Overflow用户

发布于 2013-08-30 13:53:27

您不一定需要使函数成员。你至少可以有两种不同的方法来解决这个问题。

问题是,如果我正确理解的话,在声音对象还没有被定义的情况下,所有这些都是存在的。

1)您可以重构代码,如下所示。

header文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Sound
{
public:
    Sound();

    doStuff();
}

cpp文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void non_member_function(Sound sound)

Sound::Sound() { non_member_function(*this); }
Sound::doStuff() {}

void non_member_function(Sound sound) { sound.doStuff(); }

2)如果坚持上述场景,则将Sound sound前向声明置于非会员函数之前,以获得类型识别。或者,您可以将声明放在类声明之后。

header文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Sound
{
public:
    Sound();

    doStuff();
}

void non_member_function(Sound sound)

cpp文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sound::Sound() { non_member_function(*this); }
Sound::doStuff() {}

void non_member_function(Sound sound) { sound.doStuff(); }
票数 2
EN

Stack Overflow用户

发布于 2013-08-30 14:56:50

  • 在c++中,可以将函数定义为成员函数或非成员函数。如果您已经指出,没有指定或要求将函数定义为成员或非会员,那么我将选择一个简单或简单的解决方案。
  • 在构造函数中调用非成员函数可能需要使用某种技术来进行函数调用,如果函数被定义为成员函数,则可能不需要调用。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18541925

复制
相关文章
RethinkDB is shutting down
Today I have sad news to share. After more than seven years of development, the company behind RethinkDB is shutting down. We worked very hard to make RethinkDB successful, but in spite of all our efforts we were ultimately unable to build a sustainable bu
时见疏星
2018/06/01
3960
使用 shell(bash) 来检查 git 分支是否存在
不多说,直接上代码 localBranch=$(git branch|awk '{print $2}') if [ -n "localBranch" ]; then echo "存在该分支,并不进行创建" else echo "该分支不存在" fi
用户2353021
2020/05/11
3.5K0
JavaScript 检查是否是数字
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/109551.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/05
1.1K0
js检查日期是否合法
检查日期是否合法 <script> function CheckDateTime(str) { var reg = /^(\d+)-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/; var r = str.match(reg); if (r == null) return false; r[2] = r[2] - 1; var d = new Date(r[
江一铭
2022/06/16
6.4K0
js检查是否是数组
该方法兼容Chrome 5, Firefox 4.0, IE 9, Opera 10.5 和 Safari 5,详细兼容性,可以查阅这篇文章。
IT工作者
2022/01/27
3.4K0
JS检查是否支持Storage
查看效果:http://hovertree.com/code/html5/q69kvsi6.htm
全栈程序员站长
2022/07/15
2.8K0
使用Python,怎么检查列表中所有元素是否相同?
如何判断一个列表的元素是否全部一样,有很多种方法。今天来分享一下,我最喜欢的一种方法,推荐给你。
TalkPython
2020/12/29
8.4K0
RethinkDB的简单介绍
RethinkDB最早是作为一个对SSD进行专门优化的MySQL存储引擎出现的,其特点在于对SSD的充分利用。而目前RethinkDB已经脱离MySQL成为一个独立的存储。 RethinkDB目前支持几乎所有的64位Linux发行版,包括:
Debian中国
2018/12/21
1.3K0
python 检查是否存在ddos攻击
import dpkt import socket import optparse
用户5760343
2019/07/31
3.7K0
python 检查是否存在ddos攻击
php-检查网站是否宕机
浏览量 2 <?php $url="http://www.google.com"; $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT
kdyonly
2023/03/03
1.6K0
如何使用 Python 检查两个列表是否反向相等?
在 Python 中使用列表时,在某些情况下,您可能需要比较两个列表是否反向相等。这意味着一个列表中的元素与另一个列表中的元素相同,但顺序相反。在 Python 中,我们可以使用反转和比较列表、使用 zip() 函数、将列表转换为字符串等方法检查两个列表是否反向相等。在本文中,我们将了解这些方法,并借助各种示例检查两个列表是否反向相等。
很酷的站长
2023/08/11
1950
如何使用 Python 检查两个列表是否反向相等?
Kettle之“检查表是否存在”
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53884107
用户1148526
2019/05/25
3.8K0
检测系统是否为检查版本(Checked)
<<Windows internals 5th editon>> page 48.
obaby
2023/02/28
2.2K0
检测系统是否为检查版本(Checked)
检查评论者是否有Gravatar头像
今天Angel来了,同时为风风找到了一个评论方面的BUG——游客身份若使用的邮箱没有Gravatar头像就不能发评论,这对于一些有特殊需要的朋友来说可能算不上BUG,但却不是我的需求,之后发现是comments-ajax.php文件中的以下代码在起作用:
WindCoder
2018/09/20
9240
Python脚本检查TCP端口是否正常
#!/usr/bin/python import socket import re import sys def check_server(address,port): s = socket.socket() print "Attempting to connect to %s on port %s" % (address,port) try: s.connect((address,port)) print "Connected to %s on port %s" % (address,port) retu
院长技术
2021/02/19
1.6K0
检查Linux是否被入侵的方法
一、检查系统日志 lastb //检查系统错误登陆日志,统计IP重试次数 二、检查系统用户 1、cat /etc/passwd //查看是否有异常的系统用户 2、grep "0" /etc/passwd //查看是否产生了新用户,UID和GID为0的用户 3、ls -l /etc/passwd //查看passwd的修改时间,判断是否在不知的情况下添加用户 4、awk -F : '$3==0 {print $1}' /etc/passwd //查看是否存在特权用户 5、awk -F : 'length($2
joshua317
2018/04/16
2.1K0
检查app的activity是否在当前
APP开发中经常会遇到这种需求,需要检查当前的APP是不是可见的,比如,如果是可见的就维持一个socket长连接,如果切到后台不可见了,就断开这个连接。Android本来并不允许APP去监听home键事件,所以我们没发像iOS那样通过监听home键事件来做对应的处理。不过还好Android的Activity的生命周期给我们提供了一种解决这个问题的方法,我们只需要在每个Activity的onStart和onStop中去维持一个计数,如果这个数值大于0,就表示我们的APP还有Activity是在前台运行的,等
xiangzhihong
2018/01/30
9850
检查Android是否具有摄像头
通常我们进行摄像头操作,如扫描二维码需要判断是否有后置摄像头(Rear camera),比如Nexus 7 一代就没有后置摄像头,这样在尝试使用的时候,我们需要进行判断进行一些提示或者处理。
技术小黑屋
2018/09/04
1K0
shell脚本 检查文件是否被修改
1.进行检测目录的添加,可以多个目录 2.添加定时任务,可以一分钟一次,有改动会输出改动情况 #!/bin/bash #2020-3-14 #监测文件是否被修改脚本 #监测目录 dir_file=(/etc) file_list=/usr/local/file_list.txt error_file=/usr/local/error_list.txt display_path() { for i in `ls` do if [[ -d $i ]];then             cd $i    
陈不成i
2021/06/23
2.3K0
点击加载更多

相似问题

rethinkdb检查是否存在记录

35

如何检查分片是否存在?

20

如何检查分片是否存在

71

Android:检查分片是否可见

30

如何检查集群分片是否正常启动?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文