アカウント名:
パスワード:
#define private public
#include "hoge/hoge.h"
これで秘匿関数呼びたいホーダイ。
マクロなら、OKだけど、関数は無理。 (C/C++)リンク時に相手がいない。
hoge.h: class hoge {private: void piyo();public: void hogera();}; hoge.cpp: #include "hoge.h"#include <iostream>using namespace std;
void hoge::piyo(){ cout << "piyo" << endl;}void hoge::hogera(){ cout << "hogera" << endl;} main.cpp: #define private public#include "hoge.h"
int main(){ hoge hoge; hoge.piyo();
リンク時に相手がいない。
どゆ意味?
たぶん、publicとかprivateが関数名のマングル規則に埋め込まれてると勘違いしたんじゃないの?
Visual C++ 2010 Express で確認した限りでは、private: void hoge::piyo() → ?piyo@hoge@@AAEXXZpublic: void hoge::piyo() → ?piyo@hoge@@QAEXXZなので g++ とは規則が違うようです。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家
#defineがあれば、何でも出来る (スコア:1)
#define private public
#include "hoge/hoge.h"
これで秘匿関数呼びたいホーダイ。
Re:#defineがあれば、何でも出来る (スコア:2)
マクロなら、OKだけど、関数は無理。 (C/C++)
リンク時に相手がいない。
Re: (スコア:0)
hoge.h:
class hoge {
private:
void piyo();
public:
void hogera();
};
hoge.cpp:
#include "hoge.h"
#include <iostream>
using namespace std;
void hoge::piyo()
{
cout << "piyo" << endl;
}
void hoge::hogera()
{
cout << "hogera" << endl;
}
main.cpp:
#define private public
#include "hoge.h"
int main()
{
hoge hoge;
hoge.piyo();
Re: (スコア:0)
どゆ意味?
Re: (スコア:0)
たぶん、publicとかprivateが関数名のマングル規則に埋め込まれてると勘違いしたんじゃないの?
Re: (スコア:0)
Visual C++ 2010 Express で確認した限りでは、
private: void hoge::piyo() → ?piyo@hoge@@AAEXXZ
public: void hoge::piyo() → ?piyo@hoge@@QAEXXZ
なので g++ とは規則が違うようです。