我有一個類從std::string
私下繼承,並添加了一些功能。我希望能夠像std::string
一樣使用這個類,所以我試圖定義一個隱式轉換運算符(operator string()
)。但是,我不斷收到inaccessible base
錯誤。私有繼承和隱式轉換
#include <iostream>
#include <string>
using namespace std;
class Test:private string {
int _a;
public:
operator string() {
return "hello";
}
};
int main() {
Test t;
if(t == "hello") {
cout<<"world\n";
}
}
錯誤:
trial.cpp: In function ‘int main()’:
trial.cpp:15:13: error: ‘std::basic_string<char>’ is an inaccessible base of ‘Test’
if(t == "hello") {
^
問題:
- 它是一個壞主意來定義這樣的轉換?這是否違反了推薦的編程習慣?
- 我該如何做這項工作?
編輯:鏘更有益
trial.cpp:8:5: warning: conversion function converting 'Test' to its base class 'std::basic_string<char>' will never be used
operator string() {
^
trial.cpp:15:8: error: cannot cast 'Test' to its private base class 'basic_string<char, std::char_traits<char>, std::allocator<char> >'
if(t == "hello") {
^
trial.cpp:5:12: note: declared private here
class Test:private string {
^~~~~~~~~~~~~~
請在將來發布完整的錯誤消息。 – AndyG
「hello」不是std :: string。 –
我想我可以使它工作的一種方式是使用公共繼承,並使派生類「final」。我沒有在派生類中分配任何額外內存,因此不會調用析構函數(?)不應該成爲問題。 – SPMP