我正在尝试在C上做OOP(只是为了好玩)而且我想出了一个方法来进行数据抽象,方法是使用公共部分和更大的结构,首先是公共部分,然后是私有部分.这样我在构造函数中创建整个结构并将其返回到小结构.这是正确的还是会失败?
这是一个例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// PUBLIC PART (header)
typedef struct string_public {
void (*print)( struct string_public * );
} *string;
string string_class_constructor( const char *s );
void string_class_destructor( string s );
struct {
string (*new)( const char * );
void (*delete)( string );
} string_class = { string_class_constructor, string_class_destructor };
// TEST PROGRAM ----------------------------------------------------------------
int main() {
string s = string_class.new( "Hello" );
s->print( s );
string_class.delete( s ); s = NULL;
return 0;
}
//------------------------------------------------------------------------------ …Run Code Online (Sandbox Code Playgroud) 我想知道是否安全使用lvh.me而不是localhost在本地开发时使用,因为lvh.me必须解决并且IP可能随时间变化。
lvh.me由于localhost没有顶级域,因此使用的目的是能够处理子域。
我有这个代码的问题(cubeBoxData是一组cubeBox):
cubeBox temp(bx,by,bz);
cubeBoxData.insert(temp);
set<cubeBox>::iterator i = cubeBoxData.find(temp);
const_cast<cubeBox&>(*i).addCube(x,y,z);
Run Code Online (Sandbox Code Playgroud)
问题是cubeBoxData.find(temp); 没有找到临时,那么程序尝试调用addCube()失败,我不知道为什么,因为这段代码工作正常(只需更改第三行):
cubeBox temp(bx,by,bz);
cubeBoxData.insert(temp);
set<cubeBox>::iterator i = find(cubeBoxData.begin(),cubeBoxData.end(),temp);
const_cast<cubeBox&>(*i).addCube(x,y,z);
Run Code Online (Sandbox Code Playgroud)
运算符<for cubeBox是:
bool operator<(const cubeBox& c) const {
return x<c.x ? true : y<c.y ? true : z<c.z ? true : false;
}
Run Code Online (Sandbox Code Playgroud)
并且addCube不会更改x,y或z.
我认为我的操作员<错了,我错过了一些愚蠢的东西,但我不知道它是什么.
我试图通过添加CONFIG += sanitizer sanitize_address到我的.pro文件中来使用 Qt 中的 gcc 地址清理程序,但我得到了一个error: cannot find -lasan.
我应该如何安装该库?
我正在使用 Qt 提供的 MinGW,但我也可以尝试独立版本。