以下のコードなのですが、これって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になる、なんて事はないですよね・・・
補足
A::GetNum()にはアクセスできません。
コンパイル時にエラーがでます。
VC .net 2003 でコンパイルするとアクセスできないと
コンパイルエラーになりますね。
名前空間を外せば、VC5でもちゃんとコンパイルエラーするので
C++ 的には static は関係ないかと。
これは、VC6のバグでしょうか...
そこら辺は詳しくはないのでよくわかりませんが。。。
> VC5
すいません、VC6の間違いです。
お二人ともありがとうございます。
やはりバグでしたか。
namespaceを取れば確かにエラーがちゃんと出ました。
けど、それじゃ意味ないです・・・
新しいサービスパックなんてもう出そうもないし、VS.net買えって事でしょうか。
ところでVS.net2002と2003って微妙にちがうそうですが、無料でアップデートできるの
でしょうか?
まぁ、すぐに買うわけではないのですけどね。
>新しいサービスパックなんてもう出そうもないし、VS.net買えって事でしょうか。
>ところでVS.net2002と2003って微妙にちがうそうですが、無料でアップデートできるの
>でしょうか?
昨日でましたよ。
http://www.microsoft.com/downloads/details.aspx?
displaylang=ja&FamilyID=A8494EDB-2E89-4676-A16A-5C5477CB9713
# 問題部分が直っているかは知りませんが・・・
ありがとうございます。
なんと、サービスパック出ましたか!
しかも一昨日!!
さっそくDLしてアップデート後、上のコードをコピーしてリビルド!!!
コンパイル中...
test.cpp
リンク中...
test.exe - エラー 0、警告 0
やっぱ.net買いますか・・・