我有一个包含纯虚函数的基类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) 我正在尝试使用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 ++的小型轻量级日志系统.我找到了一些现有的框架,但此时我并不需要它们的所有功能.我主要是在寻找一个可以配置日志级输出文件的小型系统.我正在寻找现有的解决方案,因为我不想重新发明轮子.
如何删除集合中的最后一个成员?
例如:
set<int> setInt;
setInt.insert(1);
setInt.insert(4);
setInt.insert(3);
setInt.insert(2);
Run Code Online (Sandbox Code Playgroud)
如何删除4
从setInt
?我尝试过类似的东西:
setInt.erase(setInt.rbegin());
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误.
我有一个像这样定义的地图
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.这里我的错误在哪里?
我在vc ++中编写了一个程序,在各种情况下具有不同的行为,如下所示.
当我通过F5运行它时,它在释放模式下正常工作.
当我通过ctrl + F5运行它时,当我开始向程序发送数据时它会崩溃.
在视觉工作室之外,它立即崩溃.
我不知道如何找到这个bug.有关这些案件之间有何不同之处的任何想法?
我有一个像这样的格式字符串:
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
吗?
我有一个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
您好我有项目在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) 为什么当我使用下面的代码时不会超出范围?
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++ ×9
stl ×5
c ×1
constructor ×1
debugging ×1
dictionary ×1
fstream ×1
logging ×1
printf ×1
pure-virtual ×1
set ×1
visual-c++ ×1