初始化列表中的自定义类对象
Custom class object in Initialization list
>我有一个类栏:
class Bar
{
public:
Bar(void);
~Bar(void);
};
一个类Foo
获取对Bar
对象的引用作为构造函数参数,并需要将其保存在私有成员bar_
中:
class Foo
{
private:
Bar& bar_;
public:
Foo(Bar& bar) : bar_(bar) {}
~Foo(void) {}
};
这不会编译:
在"Foo"中找不到重载成员函数
缺少类型说明符 - 假定为 int。注意:C++不支持默认整数
现在我怀疑我需要保证的几件事,第二个错误是Bar& bar_;
Foo
声明。声明bar_
时是否需要使用显式构造函数?
我有兴趣了解编译器在这件事上是如何工作的,因此非常感谢详细的解释。
谢谢。
编辑
好的,我正在发布一个新代码,因为显然我的代码没有任何问题。 Parser.h
:
#pragma once
class Parser
{
private:
std::istream& inputStream_;
Analyzer& analyzer_;
public:
Parser(std::istream &inputStream, Analyzer& analyzer);
~Parser(void);
};
Parser.cpp
:
#include "stdafx.h"
#include "Parser.h"
#include "Analyzer.h"
Parser::Parser(std::istream &inputStream, Analyzer& analyzer ) : inputStream_(inputStream), analyzer_(analyzer) {}
Parser::~Parser(void) {}
Analyzer.h
:
#pragma once
class Analyzer
{
public:
Analyzer(void);
~Analyzer(void);
};
这不会编译:
overloaded member function not found in 'Foo' missing type specifier - int assumed. Note: C++ does not support default-int
您提供的代码片段确实可以编译。不过,我可以告诉你一些关于这些错误的信息。
当您编译的方法与类中声明的同名方法具有相同名称但签名不同时,会发生第一条错误消息。 例如,如果您有:
class A {
public:
int foo (int);
};
int A::foo () { return 0; }
编译器将发出有关找不到重载成员函数的错误。编译器认为foo
是重载的,因为foo(void)
与foo(int)
不同。
没有类型的变量或函数时,会发生第二个错误。这通常不是实际问题,而是其他问题的结果。例如,如果您的代码在声明类之前尝试使用该类,例如:
B b;
class B {};
你会得到关于缺少类型说明符的第二个错误,但它在第一行谈论的是B
。
相关文章:
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 将 exprtk 与自定义类的对象一起使用
- 将 RTOS 队列对象封装在仅具有静态分配的 IQueue 自定义接口中
- 如何实现自定义匹配器以检查 Catch2 中的对象相等性
- 如何使用Q_PROPERTY公开自定义对象列表
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- 从自定义类获取对象向量中的 max 元素
- 如何将来自 Boost.Python 的map_indexing_suite与自定义而不是标准对象一起使用?
- 如何在自定义对象的<<运算符中添加自定义前缀
- 如何使用 STL 排序对具有模板专用化的自定义类对象进行排序?
- 如何从 cpp 中的函数返回自定义类对象?
- 如何为自定义模板对象创建专门的函数模板
- 带有自定义deleter的std::unique_ptr对象的大小(一个由ref捕获的lambda)
- 基于3个对象的自定义排序
- 如何键入用于const对象的自定义io操纵器
- 指向临时对象的自定义迭代器(延迟加载)
- 将自定义对象作为参数从目标 C 传递到 C++
- 从 Arduino 中的自定义C++库构造对象时出错
- 从链表访问对象(自定义实现)