fil*_*pos 9 c++ static struct initialization member
我已经设法初始化正确的任何基本类型的变量(即int,char,float等),但在声明一个复杂的变量时,我只能看到错误.
在头文件中,timer.hi声明
class AndroidTimerConcept {
...
private:
    //struct that holds the necessary info for every event
    struct Resources{
        timer_delegate_t membFunct;
        void *data;
        int size;
        millis_t time;
    };
    //declaring an array of 10 Resources structs
    static struct Resources ResData;
    static int best;
...
}
在timer.cpp文件中
#include <iostream>
#include "timer.h"
using namespace std;
int AndroidTimerModel::best=1000;
struct Resources AndroidTimerModel::ResData.size; //line 17!!
//constructor that initializes all the necessary variables
AndroidTimerModel::AndroidTimerModel()
{
    signal(SIGALRM,signalHandler);
    for(int i=0; i<MAX_EVENTS; i++)
    {
        //ResData.data=NULL;
        ResData.size=-1;
        //ResData.time=-1;
    }
    best=1000;
}
在编译.cpp文件时,我收到错误:timer.cpp:7:错误:'.'之前的预期初始化程序.代币
任何建议都会非常有用.
顺便说一句,我使用g ++
您不会在静态成员中单独定义单个实例成员.
这应该足够了:
AndroidTimerModel::Resources AndroidTimerModel::ResData;
您可以在C++中使用struct初始化程序,但仅限于C99之前的样式(即,您不能使用指定的初始化程序).指定的初始化程序,允许您指定要按名称初始化的成员,而不是依赖于声明顺序,在C99中引入,但目前不是任何C++标准的一部分(假设C++是超集的共同假设) C).
如果您愿意编写专门针对g ++的非可移植C++代码,则可以始终使用与指定构造函数具有相同功能的GCC特定扩展.语法是这样的:
struct value_t my_val = { member_a: 1, member_b: 1.2f };
此参考提供了对C上下文中两种类型的初始化的非常好的概述.
这是一个摘录,显示了早期(没有指示符)和C99样式:
初始化结构时,列表中的第一个初始化程序初始化第一个声明的成员(除非指定了指示符)(自C99起),以及所有后续的没有指定符的初始化程序(自C99起)初始化在前一个初始化之后声明的结构成员表达.
struct point {double x,y,z;} p = {1.2, 1.3}; // p.x=1.2, p.y=1.3, p.z=0.0
div_t answer = {.quot = 2, .rem = -1 };      // order of elements in div_t may vary
在某些情况下,您可能需要编写一些代码来初始化结构,在这种情况下,您可以使用函数的结果,如:
struct Resources AndroidTimerModel::ResData = function_that_acts_like_a_constructor();
| 归档时间: | 
 | 
| 查看次数: | 31600 次 | 
| 最近记录: |