3

私は現在 C++ を学んでいますが、いくつか問題があります。

たくさんの を使ってプログラムを開発しましたが、代わりに (collision/type/scopes...)#defineを使用したいと思います。static const

だから、私は今のようなものを持っています:

file1.hpp

 class A {
   public:
     static const std::string MY_CONST_VAR;
 };

file1.cpp

 const std::string A::MY_CONST_VAR = "some string";

file2.cpp

 static std::string arrayOfString[] = {
   A::MY_CONST_VAR,
   ...
  };

私のコードは警告/エラーなしでコンパイルされます (-W -Wall -Wextra -Werror フラグでコンパイル)。

ただし、実行しようとすると、segfault が発生します。

valgrind で実行したところ、次の出力が得られました。

==11239== Invalid read of size 4
==11239==    at 0x5F525CB: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==11239==    by 0x40D076: _GLOBAL__sub_I__ZN16GraphicInterface13DEFAULT_WIDTHE (GraphicInterface.cpp:42)
==11239==    by 0x51AC7C: __libc_csu_init (in /home/simon/PSU_2013_zappy/gui/gui_zappy)
==11239==    by 0x66D8E54: (below main) (libc-start.c:246)
==11239==  Address 0xfffffffffffffff8 is not stack'd, malloc'd or (recently) free'd

そのため、arrayOfString のインスタンス化中に segfault が発生します。問題は、 arrayOfInt が定数の前に割り当てられていることだと思います。しかし、その場合、この目的のために static const を使用することは可能ですか?

この問題にパッチを当てる方法がわかりません。私はそれを間違っていますか?それを行うより良い方法はありますか?この問題を解決するには?

4

2 に答える 2