这是我的问题:我有一个大的main.c文件,在我的程序中包含40个左右的"全局"结构(它们在文件的开头声明),我在main.c文件中也有几个函数,我能够直接读取和写入这些结构,因为它们是全局的.现在我正在尝试将我原来的main.c文件的几个函数移动到另一个.c文件中,该文件只包含与我程序的特定部分相关的函数.但是我当然不能直接从我的新.c文件中访问main.c全局变量.有没有解决的办法?我想避免通过指针传递每个结构,因为这会得到可怕的函数原型.谢谢
假设我有200个名为class1,class2等的类,派生自类,以及1到200之间的整数.有没有办法根据我的整数值明确地实现一个派生类?显然我可以手动检查每个值,但我想知道C++中有什么更灵活的东西
将大对象存储在堆上而不是堆栈中会产生什么后果(如果有的话)?我记得读过最好在堆栈上放置更大的对象来限制堆碎片......这是真的吗?谢谢
编辑:问题来自我正在制作的游戏,我的基本对象将有关于纹理,实体等的所有信息很可能在堆上创建,我真的不知道它的大小,我们可以假设像300 MB的东西
class Base {
public:
virtual void myFunc(double a, double b) { };
virtual void myFunc(double a) { };
};
class Derived : public Base {
public:
virtual void myFunc(double a) { return this->myFunc(a, 0.0); };
}; // ^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
以前的代码将无法编译:error C2660: 'Derived::myFunc' : function does not take 2 arguments
显然,编译器无法看到我正在尝试调用Base类中定义的函数,或者任何覆盖它的函数.另一方面,以下代码编译好了:
class Base {
public:
virtual void myFunc2(double a, double b) { };
virtual void myFunc(double a) { };
};
class Derived : public Base {
public:
virtual void myFunc(double a) …
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
std::vector<A>& Get() { return some_object; };
for(int i=0; i<Get().size(); ++i) {
x->push_back(Get()[i]);
}
Run Code Online (Sandbox Code Playgroud)
但是当我第一次调用size()时,我得到了垃圾值.我想某些临时的东西会被删除,但我不确定...有人能告诉我发生了什么吗?
编辑:我some_object
是一个静态向量,所以在这个例子中它永远不会被删除
我在代码库中找到了以下代码.我的同事认为这没关系,但看起来像UB一样可疑.是不是UB?
class A {
//some stuff
};
class B : public A {
int a;
int b;
int c;
}
void foo( std::vector<A>& a ) {
std::vector<B> b;
for(size_t i = 0 ; i < a.size(); ++i ){
b.push_back( *(B*)(&a[i]) );
}
//remove some elements from b
for(size_t i = 0 ; i < b.size(); ++i ){
a.push_back( *(A*)(&b[i]) );
}
}
Run Code Online (Sandbox Code Playgroud)