gpt4 book ai didi

c++ - 如何在 header 和 .cpp 文件中正确声明返回自己定义类型的函数?

转载 作者:行者123 更新时间:2023-12-04 17:05:56 26 4
gpt4 key购买 nike

我是 C++ 中处理头文件和整个抽象事物的新手,我注意到:当你在 .cpp 文件中声明一个函数时,你首先指定函数的返回类型,然后是 namespace_name :: function_signature ,函数的名称和参数与您在 .h 文件中指定的相同。然而,我应该如何编写一个函数的签名,该函数的前向声明(如果这是调用 .h 文件中的签名的方式)与自己定义的返回类型存在于相同的命名空间中? (抱歉冗长,代码比我的问题简单;请参阅下文以进行澄清)

我想在给定数组中找到最长的相等数字序列。这些是我的文件:

//"sequences.h" file
#ifndef LAB1_SEQUENCES_H
#define LAB1_SEQUENCES_H

namespace Sequences{

/**
* Abstract Data Type for a sequence
*/
struct seq{
int i;
int j;
};

/**
* Finds longest sequence of equal integers
* arr - array to search in
* n - number of elements in the array
*/
seq longest_equal(int* arr, int n);

}
#endif //LAB1_SEQUENCES_H

.
//"sequences.cpp" file
#include "sequences.h"


//Sequences :: seq Sequences :: longest_equal(int *arr, int n)
//seq Sequences :: longest_equal(int *arr, int n)
//struct seq longest_equal(int *arr, int n)
//Sequences :: struct seq longest_equal(int *arr, int n)
{
int i = 0, j = i + 1;
int lmax = -1, iR = -1, jR =-1 ; // lmax ar trebui sa fie 1 sau -1 ?
while (j < n )
{
if (arr[i] == arr[j]) j ++;
else
{
if (j - i > lmax) { lmax = j - i; iR = i; jR = j; }
i = j;
j = i + 1;
}
}
if (lmax > 1) return Sequences :: seq(iR, jR);
return Sequences::seq(-1, -1);
}

现在,我不知道如何制作我的 longest_equal .cpp 文件中的函数返回 seq类型(我关注头文件中的签名和 .cpp 文件中的签名,以及我应该在函数实现结束时在 .cpp 文件中的返回命令之前虚拟写的内容)。

我在第二个文件中的第一个赞誉之前尝试了注释的代码行作为函数的签名。我也阅读了问题的答案 here以及问题的一些答案 here并自己尝试了一些东西,但无济于事。

最佳答案

前向声明用于减少 header 依赖性。由于您的 struct seq不需要任何 header ,它只有数据成员,因此转发声明它毫无意义。您应该在标题中连同函数声明一起定义它(并在 .cpp 中有函数定义)。

您只能将前向声明用于通过引用或指针获取和返回结构和类。在您的特定情况下,struct seq是一个简单的聚合值,一个具有命名字段的元组,概念上。它不是您所说的抽象数据类型,因为它没有任何抽象内容,它相当具体并且没有行为。安 abstract data type是根据行为(函数和成员函数)而不是组成它的数据成员来定义的。

关于c++ - 如何在 header 和 .cpp 文件中正确声明返回自己定义类型的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60468949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com