2

私は非常に単純なクラススタブを持っています - 私はちょうどそれを作り始めました:

class CJSScript
{
public:
    CJSScript(std::string scriptfile);
    ~CJSScript(void);
private:
    std::string scriptname;
};
CJSScript::CJSScript(std::string scriptfile)
{
    size_t found = scriptfile.find_last_of("/\\");
    scriptname = scriptfile.substr(found+1);
    printf("should load %s now...", scriptname);

}

ただし、そのコンストラクターでは例外が発生し、this明らかに設定されています0x7ffffffe

メインプログラムは

int _tmain(int argc, _TCHAR* argv[])
{
    CJSScript* test=new CJSScript("./script/test.js");
  system("pause");
    return 0;
}

一体何が起こっているのだ。私はずっと前に自分の背後にある基本を持っていると思っていましたが、これは妥協です. 私またはコンパイラの:)

デバッガー ダンプ:

Win32Project3.exe!_output_l(_iobuf * stream, const char * format, localeinfo_struct * plocinfo, char * argptr) Line 1649    C++
Win32Project3.exe!printf(const char * format, ...) Line 62  C
Win32Project3.exe!CJSScript::CJSScript(std::basic_string<char,std::char_traits<char>,std::allocator<char> > scriptfile) Line 11 C++
Win32Project3.exe!wmain(int argc, wchar_t * * argv) Line 38 C++
Win32Project3.exe!__tmainCRTStartup() Line 240  C
4

1 に答える 1

6

printfstringオブジェクトの扱いがわからない。次を渡す必要がありますconst char*

 printf("should load %s now...", scriptname.c_str());

これは型安全性の問題です。このような理由から、特にストリームを使用することを好みます。

cout << "should load " << scriptname << " now...";
于 2012-10-17T18:18:35.073 に答える