小编her*_*ian的帖子

从基类构造函数调用纯虚函数

我有一个包含纯虚函数的基类MyBase:

void PrintStartMessage() = 0

我希望每个派生类在它们的构造函数中调用它

然后我把它放在基类(MyBase)构造函数中

 class MyBase
 {
 public:

      virtual void PrintStartMessage() =0;
      MyBase()
      {
           PrintStartMessage();
      }

 };

 class Derived:public MyBase
 {     

 public:
      void  PrintStartMessage(){

      }
 };

void main()
 {
      Derived derived;
 }
Run Code Online (Sandbox Code Playgroud)

但我收到链接器错误.

 this is error message : 

 1>------ Build started: Project: s1, Configuration: Debug Win32 ------
 1>Compiling...
 1>s1.cpp
 1>Linking...
 1>s1.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall MyBase::PrintStartMessage(void)" (?PrintStartMessage@MyBase@@UAEXXZ) referenced in function "public: __thiscall MyBase::MyBase(void)" (??0MyBase@@QAE@XZ)
 1>C:\Users\Shmuelian\Documents\Visual Studio 2008\Projects\s1\Debug\s1.exe : fatal …
Run Code Online (Sandbox Code Playgroud)

c++ constructor abstract-class pure-virtual object-lifetime

35
推荐指数
4
解决办法
3万
查看次数

std :: fstream不会创建文件

我正在尝试使用std :: fstream for io来存档,我想创建该文件(如果它尚不存在).

  std::fstream my_stream
  my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out);
  if(!my_stream)
      std::cout<<"error"<<strerror(errorno);
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:"没有这样的文件或目录."

在这种情况下如何创建文件?

c++ fstream stl

30
推荐指数
2
解决办法
2万
查看次数

小记录器类

我正在寻找一个c ++的小型轻量级日志系统.我找到了一些现有的框架,但此时我并不需要它们的所有功能.我主要是在寻找一个可以配置日志级输出文​​件的小型系统.我正在寻找现有的解决方案,因为我不想重新发明轮子.

c++ logging

28
推荐指数
4
解决办法
6万
查看次数

擦除std :: set的最终成员

如何删除集合中的最后一个成员?

例如:

set<int> setInt;
setInt.insert(1);
setInt.insert(4);
setInt.insert(3);
setInt.insert(2);
Run Code Online (Sandbox Code Playgroud)

如何删除4setInt?我尝试过类似的东西:

 setInt.erase(setInt.rbegin());
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误.

c++ stl set

25
推荐指数
3
解决办法
1万
查看次数

将std :: map数据复制到另一个地图

我有一个像这样定义的地图

 struct A
 {
  int A;
  int B;
 };
 typedef map<int,A> Amap;
Run Code Online (Sandbox Code Playgroud)

然后我有Amap1,我想复制它Amap2

 A a....;
 Amap Amap1,Amap2;
 Amap1[1]=a1;
 Amap1[2]=a2;
 Amap1[3]=a3;
 Amap2.insert(Amap1.begin(), Amap1.end());
Run Code Online (Sandbox Code Playgroud)

有时这工作正常,有时这只复制键和值0.这里我的错误在哪里?

c++ dictionary stl

18
推荐指数
2
解决办法
5万
查看次数

visual studio F5,ctrl + F5或在visual studio外面运行有什么不同?

我在vc ++中编写了一个程序,在各种情况下具有不同的行为,如下所示.

当我通过F5运行它时,它在释放模式下正常工作.

当我通过ctrl + F5运行它时,当我开始向程序发送数据时它会崩溃.

在视觉工作室之外,它立即崩溃.

我不知道如何找到这个bug.有关这些案件之间有何不同之处的任何想法?

c++ debugging visual-c++ visual-studio-debugging

17
推荐指数
2
解决办法
3万
查看次数

如何将相同的变量多次打印到字符串中?

我有一个像这样的格式字符串:

buf[] = "A%d,B%d,C%d,D%d,F%d,G%d,H%d,I%d,J%d";
Run Code Online (Sandbox Code Playgroud)

我想为每个插入相同的整数,%d所以我使用:

 int val = 6;
 sprintf(buf2, buf, val,val,val,val,val,val,val,val,val);
Run Code Online (Sandbox Code Playgroud)

我可以使用sprintf只需要我写val一次的方式,并将sprintf每个使用它%d吗?

c printf

13
推荐指数
2
解决办法
5430
查看次数

如何将二进制数据复制到字符串流

我有一个std::vector<int>,我想序列化它.为此我想尝试使用std::stringstream

 vector<int> v;
 v.resize(10);
 for (int i=0;i<10;i++)
 v[i]=i;


 stringstream ss (stringstream::in | stringstream::out |stringstream::binary);
Run Code Online (Sandbox Code Playgroud)

但是,当我将矢量复制到stringstream时,将其复制为字符

ostream_iterator<int> it(ss);
copy(v.begin(),v.end(),it);
Run Code Online (Sandbox Code Playgroud)

插入缓冲区(_Strbuf)的值是"123456789"

我成功地编写了一个解决方案

for (int i=1;i<10;i++)
   ss.write((char*)&p[i],sizeof(int));
Run Code Online (Sandbox Code Playgroud)

我想通过使用像复制这样的std函数来做类似第一种方式的事情

谢谢Herzl

c++ stl

11
推荐指数
1
解决办法
9949
查看次数

将配置从Debug更改为Release时的链接错误

您好我有项目在VC++ 2008年该项目在调试模式下编译没有错误,但是当我尝试建立它在释放模式,我得到以下链接erorr.

1>Linking...
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __heap_alloc already defined in LIBCMT.lib(malloc.obj)
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __recalloc already defined in LIBCMT.lib(recalloc.obj)
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __msize already defined in LIBCMT.lib(msize.obj)
1>LIBCMTD.lib(malloc.obj) : error LNK2005: _V6_HeapAlloc already defined in LIBCMT.lib(malloc.obj)
1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook already defined in LIBCMT.lib(dbghook.obj)
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_pHeaderDefer already defined in LIBCMT.lib(sbheap.obj)
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __get_sbh_threshold already defined in LIBCMT.lib(sbheap.obj)
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __set_sbh_threshold already defined in LIBCMT.lib(sbheap.obj)
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __set_amblksiz …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors

10
推荐指数
2
解决办法
3万
查看次数

为什么当我使用std:vector和operator []在超出范围的情况下不会得到异常?

为什么当我使用下面的代码时不会超出范围?

std::vector<int> v;
v.resize(12);
int t;
try {
    t = v[12];
} catch(std::exception  e){
    std::cout<<"error:"<<e.what()<<"\n";
}
Run Code Online (Sandbox Code Playgroud)

c++ stl

6
推荐指数
2
解决办法
2982
查看次数