C++ 从基类结构生成子类

C++ 从基类结构生成子类,c++,C++,我有一个库给了我,在那里我应该为它的struct子类化,以便在我自己的应用程序中使用。当我这样做的时候,效果很好。但是,当我将子类定义更改为class而不是struct(并且我确保在所有内部内容之前public:)时,编译器(Visual Studio编译器10)会给我一个奇怪的错误: typecast:转换存在但无法访问 发生此错误的行如下所示: LibraryNameSpace::客户端c(配置选项和mySublassObject) 我不明白为什么从struct到class的简单更改会产生这

我有一个库给了我,在那里我应该为它的
struct
子类化,以便在我自己的应用程序中使用。当我这样做的时候,效果很好。但是,当我将子类定义更改为
class
而不是struct(并且我确保在所有内部内容之前
public:
)时,编译器(Visual Studio编译器10)会给我一个奇怪的错误:

typecast:转换存在但无法访问

发生此错误的行如下所示:

LibraryNameSpace::客户端c(配置选项和mySublassObject)

我不明白为什么从
struct
class
的简单更改会产生这个错误;任何编译器添加的默认构造函数都将应用于
struct
class
,包括转换构造函数(如果这是这里的问题)


是否因为从
结构
基类创建
子类不是一个好主意?

默认情况下,“结构”的成员是公共的,而“类”的成员是私有的。如果未指定public/private,“struct”中的所有成员在您将其更改为“class”时都变为private

你是私人继承还是公共继承

class Subclass : public SuperClass {
public:
    // ...
};

“struct”的成员默认为public,而“class”的成员默认为private。如果未指定public/private,“struct”中的所有成员在您将其更改为“class”时都变为private

你是私人继承还是公共继承

class Subclass : public SuperClass {
public:
    // ...
};

从结构更改为子类不应导致错误。也许客户端构造函数定义为显式?@johnpison没有任何标记为显式,但有一个答案是有效的。从struct更改为subclass不应导致错误。也许客户端构造函数被定义为显式的?@johnpison没有任何标记为显式的,但是有一个答案是有效的。你搞定了,谢谢。我没有列出
public
private
;所以我猜默认值不能是公共的?当我添加
public
时,它起作用了。问题是:为什么?@OpenLearner如果您没有指定继承方法,那么将使用默认的私有继承。它使所有继承的属性和方法都私有化。谢谢。我没有列出
public
private
;所以我猜默认值不能是公共的?当我添加
public
时,它起作用了。问题是:为什么?@OpenLearner如果您没有指定继承方法,那么将使用默认的私有继承。它使所有继承的属性和方法都成为私有的