2013-09-22 45 views
0

我有一個庫給我,我應該在其中的一個struct繼承我的應用程序。當我這樣做,它工作正常。然而,當我改變我的子類定義class不是struct(我一定要public:裏面的一切之前),編譯器(Visual Studio的編譯器10)給我這個奇怪的錯誤:從基類構造子類struct

typecast: conversion exists but is inaccessible

線對發生看起來這個錯誤是這樣的:

LibraryNameSpace::Client c(config_options, &mySublassObject);

我不明白,爲什麼從structclass一個簡單的變化造成此錯誤;任何編譯器添加的默認構造函數將適用於structclass,包括轉換構造函數(如果這是問題)。

難道這是因爲從struct基類創建class子類不是一個好主意嗎?

+1

從結構變成子類不應該導致錯誤。也許客戶端構造函數被定義爲顯式? –

+0

@JohnPoison沒有標明明確的,但有一個工作的答案。 – johnbakers

回答

3

'struct'的成員默認是公共的,而'class'的成員默認是私有的。如果你沒有指定public/private,那麼當你將'struct'變成'class'時,'struct'中的所有成員都是私有的。

你是否也繼承了私人或公共?

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

你釘了它,謝謝。我沒有列出「公共」或「私人」;所以我想默認不能公開?當我添加「公共」它的工作。問題是:爲什麼? – johnbakers

+1

@OpenLearner如果你沒有指定繼承方法,那麼將使用默認繼承,這是私有的。它使所有繼承的屬性和方法保密 –