diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2011-01-17 14:52:44 -0200 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:13:52 -0300 |
commit | 8d9d66484195501f7f9a57d527b39964b384bfde (patch) | |
tree | 9b930218e9318d18230f1c5caa3209bae31a9034 /generator/cppgenerator.cpp | |
parent | 3b22ffebad4736fafde0ff5a23bb3508be8d4b6d (diff) |
Fix bug 616 - "error compiling when public and private methods differ by the const-ness"
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'generator/cppgenerator.cpp')
-rw-r--r-- | generator/cppgenerator.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp index d5697ab72..b7148017c 100644 --- a/generator/cppgenerator.cpp +++ b/generator/cppgenerator.cpp @@ -2092,12 +2092,18 @@ void CppGenerator::writeMethodCall(QTextStream& s, const AbstractMetaFunction* f if (func->isStatic()) mc << func->ownerClass()->qualifiedCppName() << "::"; else { + if (func->isConstant()) { #ifdef AVOID_PROTECTED_HACK - if (!func->isVirtual() && func->ownerClass()->hasProtectedMembers()) - mc << "((" << func->ownerClass()->qualifiedCppName() << "*)" << CPP_SELF_VAR << ")->"; - else + mc << "const_cast<const "; + bool hasProtectedMembers = func->ownerClass()->hasProtectedMembers(); + mc << (hasProtectedMembers ? wrapperName(func->ownerClass()) : func->ownerClass()->qualifiedCppName()); + mc << "*>(" CPP_SELF_VAR ")->"; +#else + mc << "const_cast<const " << func->ownerClass()->qualifiedCppName() << "*>(" CPP_SELF_VAR ")->"; #endif + } else { mc << CPP_SELF_VAR "->"; + } } if (!func->isAbstract() && func->isVirtual()) |