39

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

bool data(struct *sampleData)
{

}

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

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

}

我得到的错误是:

C++ 需要所有声明的类型说明符 bool data(const &testStruct)

我已经尝试过这里解释的一些示例:Simple way to pass temporary struct by value in C++?

希望可以有人帮帮我。

4

4 回答 4

118

首先,您的 data() 函数的签名:

bool data(struct *sampleData)

不可能工作,因为参数缺少名称。当您声明要实际访问的函数参数时,它需要一个名称。因此,将其更改为:

bool data(struct sampleData *samples)

但在 C++ 中,您实际上根本不需要使用struct。所以这可以简单地变成:

bool data(sampleData *samples)

其次,此时sampleDatadata() 不知道该结构。所以你应该在此之前声明它:

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);
}

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

但是,请注意,在 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);
}
于 2013-03-03T02:27:23.050 回答
2

通过引用将结构传递给函数:简单:)

#define maxn 1000

struct solotion
{
    int sol[maxn];
    int arry_h[maxn];
    int cat[maxn];
    int scor[maxn];

};

void inser(solotion &come){
    come.sol[0]=2;
}

void initial(solotion &come){
    for(int i=0;i<maxn;i++)
        come.sol[i]=0;
}

int main()
{
    solotion sol1;
    inser(sol1);
    solotion sol2;
    initial(sol2);
}
于 2018-05-07T00:27:59.000 回答
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++ish 的方式来做到这一点。

于 2013-03-03T02:21:47.510 回答
0

可以在函数参数中构造一个结构:

function({ .variable = PUT_DATA_HERE });
于 2020-08-23T01:04:34.110 回答