2013-03-03 159 views
21

我无法理解如何将结构(通过引用)传递给函数,以便可以填充结构的成员函数。到目前为止,我已经写了:将结构传递给函数

bool data(struct *sampleData) 
{ 

} 

int main(int argc, char *argv[]) { 

     struct sampleData { 

     int N; 
     int M; 
     string sample_name; 
     string speaker; 
    }; 
     data(sampleData); 

} 

我得到的错误是:

C++需要一个类型说明符的所有声明

我试图 布尔数据(常量& testStruct)这里解释一些例子:Simple way to pass temporary struct by value in C++?

希望有人能帮助我。

+0

你正在传递一个类型名称的函数而不是变量? – billz 2013-03-03 02:20:18

+0

这不是通过引用,那是通过指针。你没有创建'sampleData'的实例,所以它没有名字。另外,函数bool数据应该如何知道'sampleData'存在? – Rapptz 2013-03-03 02:21:12

+0

@billz'sampleData'是我的结构体的名称。我希望能够将此结构传递给我现在明白的函数 – Phorce 2013-03-03 02:21:14

回答

67

首先,你的数据的签名()函数:

bool data(struct *sampleData) 

不可能工作,因为参数缺乏的名称。当你声明你想要实际访问的函数参数时,它需要一个名字。因此,它更改为类似:

bool data(struct sampleData *samples) 

但在C++中,你并不需要使用struct在所有实际。因此,这可以简单地变成:

bool data(sampleData *samples) 

其次,sampleData结构是不知道的数据()在这一点上。所以,你应该在这之前声明它:

struct sampleData { 
    int N; 
    int M; 
    string sample_name; 
    string speaker; 
}; 

bool data(sampleData *samples) 
{ 
    samples->N = 10; 
    samples->M = 20; 
    // etc. 
} 

最后,你需要创建sampleData类型的变量。例如,在你的main()函数:

int main(int argc, char *argv[]) { 
    sampleData samples; 
    data(&samples); 
} 

请注意,您需要将变量的地址传递给数据()函数,因为它接受一个指针。

但是,请注意,在C++中,您可以直接通过引用传递参数,并且不需要用指针“模拟”它。你可以这样做:

// Note that the argument is taken by reference (the "&" in front 
// of the argument name.) 
bool data(sampleData &samples) 
{ 
    samples.N = 10; 
    samples.M = 20; 
    // etc. 
} 

int main(int argc, char *argv[]) { 
    sampleData samples; 

    // No need to pass a pointer here, since data() takes the 
    // passed argument by reference. 
    data(samples); 
} 
1
bool data(sampleData *data) 
{ 
} 

您需要告诉方法您正在使用哪种类型的结构。在这种情况下,sampleData。

注意:在这种情况下,您需要在方法之前定义结构以识别它。

例子:

struct sampleData 
{ 
    int N; 
    int M; 
    // ... 
}; 

bool data(struct *sampleData) 
{ 

} 

int main(int argc, char *argv[]) { 

     sampleData sd; 
     data(&sd); 

} 

注2:我是一个C的家伙。可能有更多的C++方法来做到这一点。

+0

。 struct“sample_data”应该在函数本身之前? – Phorce 2013-03-03 02:22:57

+1

再一次,这不是通过引用,那是*通过指针*。 – Rapptz 2013-03-03 02:30:41