クラスのプライベート関数にアクセス出来てしまう – プログラミング – Home

クラスのプライベート関数にアクセス出来...
 
通知
すべてクリア

[解決済] クラスのプライベート関数にアクセス出来てしまう


SunPac
 SunPac
(@SunPac)
ゲスト
結合: 22年前
投稿: 105
Topic starter  

以下のコードなのですが、これってC++の使用なのでしょうか?

#include <iostream>
#include <string>

namespace CLASSDEF{

class A{
static std::string &GetString();
int GetNum() { return 10; }
};

std::string &A::GetString()
{
static std::string str;
return str;
}

} // namespace CLASSDEF

int main()
{

// ↓privateなのにコンパイルできる
CLASSDEF::A::GetString() = privateメンバだよ;

// ↓ 実際、正しく表示される(けどアクセスできていいの?)
std::cout << CLASSDEF::A::GetString() << std::endl;

return 0;
}

環境はVC6SP5+WinXPSP1です。
staticなメンバ関数は全てpublicになる、なんて事はないですよね・・・


引用未解決
トピックタグ
SunPac
 SunPac
(@SunPac)
ゲスト
結合: 22年前
投稿: 105
Topic starter  

補足
A::GetNum()にはアクセスできません。
コンパイル時にエラーがでます。


返信引用
joan
 joan
(@joan)
ゲスト
結合: 23年前
投稿: 42
 

VC .net 2003 でコンパイルするとアクセスできないと
コンパイルエラーになりますね。

名前空間を外せば、VC5でもちゃんとコンパイルエラーするので
C++ 的には static は関係ないかと。

これは、VC6のバグでしょうか...
そこら辺は詳しくはないのでよくわかりませんが。。。


返信引用
joan
 joan
(@joan)
ゲスト
結合: 23年前
投稿: 42
 

> VC5
すいません、VC6の間違いです。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 22年前
投稿: 830
 

http://support.microsoft.com/default.aspx?scid=kb;en-us;263639
これでしょうね。


返信引用
SunPac
 SunPac
(@SunPac)
ゲスト
結合: 22年前
投稿: 105
Topic starter  

お二人ともありがとうございます。

やはりバグでしたか。
namespaceを取れば確かにエラーがちゃんと出ました。
けど、それじゃ意味ないです・・・

新しいサービスパックなんてもう出そうもないし、VS.net買えって事でしょうか。
ところでVS.net2002と2003って微妙にちがうそうですが、無料でアップデートできるの
でしょうか?

まぁ、すぐに買うわけではないのですけどね。


返信引用
てつや
 てつや
(@てつや)
ゲスト
結合: 22年前
投稿: 34
 

>新しいサービスパックなんてもう出そうもないし、VS.net買えって事でしょうか。
>ところでVS.net2002と2003って微妙にちがうそうですが、無料でアップデートできるの
>でしょうか?
昨日でましたよ。
http://www.microsoft.com/downloads/details.aspx?
displaylang=ja&FamilyID=A8494EDB-2E89-4676-A16A-5C5477CB9713

# 問題部分が直っているかは知りませんが・・・


返信引用
SunPac
 SunPac
(@SunPac)
ゲスト
結合: 22年前
投稿: 105
Topic starter  

ありがとうございます。
なんと、サービスパック出ましたか!
しかも一昨日!!

さっそくDLしてアップデート後、上のコードをコピーしてリビルド!!!

コンパイル中...
test.cpp
リンク中...

test.exe - エラー 0、警告 0

やっぱ.net買いますか・・・


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました