Error when using "cout"

#include <iostream>

#include "pandaFramework.h"
#include "pandaSystem.h"

using namespace std;

int main(int argc, char *argv[]) {
	
  PandaFramework framework;
  framework.open_framework(argc, argv);

  framework.set_window_title("My Panda3D Window");
  WindowFramework *window = framework.open_window();

  cout << "Hello World!";

  framework.main_loop();
  framework.close_framework();
  return (0);
}

This code causes an error.

LINK : warning LNK4217: symbol '?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z (public: void __cdecl std::basic_ios<char,struct std::char_traits<char> >::setstate(int,bool))' defined in 'libcpmt.lib(cout.obj)' is imported by 'game.obj' in function '"class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char const *)" (??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z)'
LINK : warning LNK4217: symbol '?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z (public: int __cdecl std::basic_streambuf<char,struct std::char_traits<char> >::sputc(char))' defined in 'libcpmt.lib(locale.obj)' is imported by 'game.obj' in function '"class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char const *)" (??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z)'
game.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > * __cdecl std::basic_ios<char,struct std::char_traits<char> >::tie(void)const " (__imp_?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ) referenced in function "public: __cdecl std::basic_ostream<char,struct std::char_traits<char> >::sentry::sentry(class std::basic_ostream<char,struct std::char_traits<char> > &)" (??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z)
game.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class std::basic_streambuf<char,struct std::char_traits<char> > * __cdecl std::basic_ios<char,struct std::char_traits<char> >::rdbuf(void)const " (__imp_?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ) referenced in function "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char const *)" (??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z)
game.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: char __cdecl std::basic_ios<char,struct std::char_traits<char> >::fill(void)const " (__imp_?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ) referenced in function "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char const *)" (??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z)
game.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __int64 __cdecl std::basic_streambuf<char,struct std::char_traits<char> >::sputn(char const *,__int64)" (__imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z) referenced in function "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char const *)" (??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z)
game.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl std::basic_ostream<char,struct std::char_traits<char> >::_Osfx(void)" (__imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ) referenced in function "public: __cdecl std::basic_ostream<char,struct std::char_traits<char> >::sentry::~sentry(void)" (??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ)
game.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::basic_ostream<char,struct std::char_traits<char> >::flush(void)" (__imp_?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ) referenced in function "public: __cdecl std::basic_ostream<char,struct std::char_traits<char> >::sentry::sentry(class std::basic_ostream<char,struct std::char_traits<char> > &)" (??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z)
D:\MyGame\bin\game.exe : fatal error LNK1120: 6 unresolved externals

If I delete cout, the compilation is successful.

What commands are you using to build and to link game.exe? My first guess is that the stdlib is missing in a linker line (not sure what the right way to do this with MSVC is).

I use the CMD file

call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" x86_amd64

cl /Ot /I D:\sourse_panda3d-1.10.6\built_x64\include /EHsc game.cpp /link /out:D:\MyGame\bin\game.exe ^

D:\sourse_panda3d-1.10.6\built_x64\lib\libp3framework.lib ^
D:\sourse_panda3d-1.10.6\built_x64\lib\libpanda.lib ^
D:\sourse_panda3d-1.10.6\built_x64\lib\libpandaexpress.lib ^
D:\sourse_panda3d-1.10.6\built_x64\lib\libp3dtool.lib ^
D:\sourse_panda3d-1.10.6\built_x64\lib\libp3dtoolconfig.lib

pause

But the most interesting thing is that if I don’t use a Panda, but create a standard hello world, it works.

I run it successfully after compiling with these parameters.

#include <iostream>
#include <cstdlib>
using namespace std;

int main() 
{ 
    cout << "Hello, world!" << endl;
    system("pause"); 
    return 0; 
}

But it doesn’t work.

#include <iostream>

#include "pandaFramework.h"
#include "pandaSystem.h"

#include <cstdlib>
using namespace std;

int main(int argc, char *argv[]) {
	
  PandaFramework framework;
  framework.open_framework(argc, argv);

  framework.set_window_title("My Panda3D Window");
  WindowFramework *window = framework.open_window();

  cout << "Hello World!" << endl;

  framework.main_loop();
  framework.close_framework();
  return (0);
}

Might be an issue with incompatible build flags between Panda and your project. Unfortunately, I’m not as familiar with MSVC flags as I used to be, nor do I know what Panda is built with. However make sure you’re doing a release build of your project or using a debug build of the SDK. Also make your usage of /MD or /MT lines up with Panda’s build flags.

It worked thanks @Moguri!