我在3个不同的编译器(G++,clang++,CL.exe)中尝试了下面的代码片段,它们都告诉我它们无法消除重载构造函数的歧义。现在,我知道如何修改对构造函数的调用,使其选择一个或另一个(或者显式地表明第二个参数是无符号的字面值,或者显式地强制转换它)。
然而,我很好奇为什么编译器首先会试图在构造函数之间进行选择,因为其中一个构造函数是私有的,并且对构造函数的调用发生在主函数中,而主函数应该在类的作用域之外。
有谁能开导我吗?
class Test
{
private:
Test(unsigned int a, unsigned int *b) { }
public:
可以使用以下代码继承基类的所有构造函数:
class DerivedClass : public BaseClass {
public:
using BaseClass::BaseClass;
...
};
是否可以以简单的方式继承所有运算符(一行)?
不编译的程序代码:
#include <string>
#include <memory>
using std::string;
struct A : string
{
using string::string;
};
int main()
{
std::shared_ptr<
继承自另一个类的类和继承它的子类的类之间有技术上的区别吗?在下面的代码中,A和B有什么区别:
a)
public class foo {
...
private class bar {...}
}
b)
public class foo { ...}
private class bar extends foo {...}
使用下面的代码,clang3.0给出了error: lookup of 'N' in member access expression is ambiguous,而clang3.4和gcc 4.8都没有错误地接受代码。
struct B
{
struct M
{
void f()
{
}
};
};
namespace N
{
struct M
{
void f()
{
}
};
}
template<typename>
以下代码没有编译:
class C
{
private:
int m_x;
protected:
C(int t_x) : m_x(t_x) { }
};
class D : public C
{
public:
using C::C;
};
int main(int argc, char **argv)
{
D o(0);
}
编译器的反对意见是C的构造函数被声明为protected,这意味着我不能从main访问它。换句话说,using声明似乎拖着标识符的原始可见性,尽管它存在于public块中。
两
我移植了一个用C++编写的长时间稳定库,并将其提升到黑莓10。这个库在设备之间传输文件。该库编译和链接良好,运行良好。但是,在我的黑莓10设备上,在传输了1、2或3个文件之后,我始终会遇到一个抛出的异常。将异常捕获为源代码中的boost::system::system_error显示为异常16,其文本为“互斥:资源繁忙”。
下面是发生异常的源代码:
try
{
. . .
// Find DtpFunctionData for the operation ID, use it to invoke handling function
std::map<int, F
我想知道下面的代码是否正确
class A
{
public :
int show (int x, int y);
};
class B : public A
{
public :
float show (int a, int b); // can i overload this function ?
};
show函数存在于具有不同编写类型的基类和派生类中。我知道函数重载的概念(不能用不同的返回类型重载)。
这样做是可能的吗?
如何在"Component“类中添加受保护的虚拟方法,以便从”组合“中调用它?
作为一个具体的例子,看看下面的代码,请告诉我如何避免DxCompositeShape.ComputeSize中的编译器错误。
abstract class DxShape // this is the Component
{
public abstract void Paint();
protected abstract void ComputeSize();
}
class DxCompositeShape : DxShape // this is the Composite
{
我对这两个术语有点困惑,很高兴能澄清一些疑问。
据我所知,function overloading意味着在同一个类中有多个方法具有相同的名称,但参数的数量不同,参数的类型不同,或者参数的序列与返回类型无关,这对损坏的函数名称没有任何影响。
上述定义是否也包括"....in同一类或跨相关类(通过继承相关).....“
Function Overriding与虚函数、相同的方法签名(在基类中声明为虚)以及在子类中的实现被重写有关。
我在想一个场景,以下是代码:
#include <iostream>
class A
{
public:
void doSomet
我有一个在C#中使用继承的代码,而且我似乎在过程中丢失了我的价格变量。如果父类没有将价格变量作为参数,那么如何使其与子类一起工作呢?请注意:这已经提交和标记,我不寻找额外的分数,只是试图提高我的学习。
不确定这是否有足够的代码来帮助,但我不想淹没屏幕。基本上,PerformBuyStock方法在程序文件中,它记录价格变量和数量。但是,一旦事务通过事务类执行,因为它没有像StockPurchaseTransaction类那样的3个参数(股票、价格、数量),那么当它执行printSummary时,价格会回复到0。如何在不更改事务类的情况下使价格变量仍然存在?感谢您所能提供的任何帮助。
public
我正在读一篇关于制作自定义主体的教程,我遇到了下面的代码:
public class BaseController : Controller
{
protected virtual new UserPrincipal User
{
get { return HttpContext.User as UserPrincipal; }
}
}
“受保护的虚拟新闻”到底是如何工作的?
关键词"new“是最让我困惑的。
我想知道为什么下面的代码不会输出任何内容。我正在尝试从父类中的方法访问Bar::$some_var。其中Bar::$some_var是在其构造函数中定义的。
我尝试过在self::$some_var和static::$some_var中使用Foo::hello(),但两者都没有用。我要做$some_var static吗?
class Foo {
private $some_var;
public function __construct() {
$this->some_var = 5;
}
public function hello
我正在做一项学校作业,在那里我必须实现工厂模式。我已经走了很长一段路,但还有最后一件事我没能找到工作。
我有以下课程:
//Human.java
package human;
public abstract class Human{
public static Human create(String namn, String pnr){
char nastsist_char = pnr.charAt(9); // takes second last char in pnr
String nastsist_string = Character.toStri
下面的代码返回错误“object”不包含接受x参数的构造函数。在试图调用基本构造函数的行中。
解决方案1,项目1
namespace Project.Sub.A
{
internal class Foo
{
internal Foo(int a, long b) {}
}
}
解决方案1,项目2
namespace Project.Sub.B{
internal class Bar : Foo
{
internal Bar(int a, long b,long c) :base(a,b+c) {}
}
}
我不知道为什么这不想起作用。是不是我的命名空
我在C++多重继承中遇到了一个问题。这是我的代码,当我调用display()函数时,它给我的成员‘display’是模棱两可的。但是Class M display()函数是私有的。
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
class M
{
void display()
{
cout<<"Class M"<<endl;
}
};
class N
{
pub
在struct (或类)中,我知道我可以添加一个函数,然后再调用它。
struct State {
int turnsLeft;
void nextTurn() {
turnsLeft--;
}
};
State s1{1};
State s2{2};
s1.nextTurn();
我的问题是,这些函数与结构占用的空间有多大的关系?我知道int是4个字节,所以创建s1和s2至少要花费4*2=8字节。但是,每当我创建一个新的结构时,会创建这个函数的一个新副本吗?或者,不管我做了多少个不同的State函数,都只会创建和共享该函数的一个副本吗?如果函数每次都被
如何实例化基类ctor为私有的派生类对象?
由于派生类ctor隐式调用基类ctor(它是私有的),所以编译器会给出错误。
考虑下面的示例代码:
#include <iostream>
using namespace std;
class base
{
private:
base()
{
cout << "base: ctor()\n";
}
};
class derived: public base
{
public:
derived()
{
我读到Java不支持操作符重载。然后,我想知道如何在Integer类的实例上使用增量运算符。
Integer number = new Integer(10);
System.out.println(++number);
上面的代码编译得很好,没有错误。但是假设我创建了自己的类,只使用一个成员变量(一个整数),并尝试使用增量运算符。这会给我一个编译器错误。为什么会这样呢?
我有以下代码,它编译没有任何错误或警告。
#include<iostream>
using namespace std;
class Father
{
public:
int foo()
{
cout<<"int foo";
return 111;
}
};
class Son: public Father
{
public:
long foo()
{
cout<<"long foo";
return 222;
}
};
我正在玩弄一个FSM的,并且遇到了如下的模糊:
/home/permal/code/FSM/Test/../FSM/dist/include/FSM.h: In instantiation of ‘void fsm::FSM<FSMBaseState>::Event(std::unique_ptr<EventType>) [with EventType = AddEvent; FSMBaseState = EventBaseState]’:
/home/permal/code/FSM/Test/test.cpp:83:44: required from here
/
在我最近发布的一个问题()的评论中,我遇到了关于如何使用static_cast从派生类型转换为基类型的另一个问题。有关此问题的支持文档可在以下位置找到:。
我的主要问题是现在使用static_cast将其强制转换为我的派生类中的基类是没有问题的。但是,我不能执行从派生引用到基引用的静态转换。我只在派生类的相等运算符中执行此操作。这是问题所在:
bool Derived::operator==(const Derived& other_derived) {
// first call the operator == from the base class...
if (stati