Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象数组传递给类 #包括“average.c++” #包括“name.c++” 班级等级{ 公众: 等级(){} 无效搜索数组(名称*数组[]){ int i; 对于(i=0;i名称); } } }; int main(){ int i; 字符行[64]; 姓名*姓名[10]; 对于(i=0;i搜索数组(名称); }_C++_Class - Fatal编程技术网

将对象数组传递给类 #包括“average.c++” #包括“name.c++” 班级等级{ 公众: 等级(){} 无效搜索数组(名称*数组[]){ int i; 对于(i=0;i名称); } } }; int main(){ int i; 字符行[64]; 姓名*姓名[10]; 对于(i=0;i搜索数组(名称); }

将对象数组传递给类 #包括“average.c++” #包括“name.c++” 班级等级{ 公众: 等级(){} 无效搜索数组(名称*数组[]){ int i; 对于(i=0;i名称); } } }; int main(){ int i; 字符行[64]; 姓名*姓名[10]; 对于(i=0;i搜索数组(名称); },c++,class,C++,Class,这段代码给出了错误 “成员函数”中的“.C++”:SalcRay.(名称*): grade.c++:11:25:错误:请求“array”中的成员“name”,该成员是指针类型“name*”(可能您想使用“->”?) 我需要帮助来完成这项工作。我猜这是一个简单的扩展类,就像你在java中,但不知道这是如何工作C++。 我假设您可以将一个对象数组传递给一个类,就像您在C中只使用一个数组一样。 我的问题的根本在于找到一个解决方案,并找出此代码出错的原因。利用标准库可以大大改进代码。初始代码的问题是,您

这段代码给出了错误 “成员函数”中的“.C++”:SalcRay.(名称*): grade.c++:11:25:错误:请求“array”中的成员“name”,该成员是指针类型“name*”(可能您想使用“->”?) 我需要帮助来完成这项工作。我猜这是一个简单的扩展类,就像你在java中,但不知道这是如何工作C++。 我假设您可以将一个对象数组传递给一个类,就像您在C中只使用一个数组一样。
我的问题的根本在于找到一个解决方案,并找出此代码出错的原因。

利用标准库可以大大改进代码。初始代码的问题是,您正在执行
array->name
,其中
array
是一个C样式的数组(从技术上讲是它衰减到的指针)。除非首先在索引处获取指针,否则不可能使用这样的表达式:

#include "average.c++"
#include "name.c++"

class Grade {
public:
  Grade() {}
  void searcharray(Name *array[]) {
    int i;
    for(i = 0; i <= 10; i++){
      printf("%s", array->name);
    }
  }
};

int main() {
  int i;
  char line[64];
  Name *names[10];
  for(i = 0; i < 5; i++){
    scanf("%s", &line);
    names[i] = new Name(line);
  }
  Grade *test;
  test = new Grade();
  test->searcharray(names);
}

此外,写入该行的for循环遍历数组1的次数过多。正如其他人指出的那样,条件语句
i的问题在于,您使用的参数声明为
Name*array[]
类似于
array->Name

<>记住C++是在C的顶部建立的,它遵循规则“声明模仿用法”,这意味着声明变量的方式看起来像它使用的方式。因此,宣言:

#include <iostream>
#include <string>
#include <vector>
#include <memory>

class Grade
{
public:
    Grade() { }

    static void searcharray(const std::vector<std::unique_ptr<Name>>& array)
    {
        for (const auto& obj : array)
        {
            std::cout << obj->name;
        }
    }
};

int main()
{
    std::string name;
    std::vector<std::unique_ptr<Name>> names;

    while (std::cin >> name)
        names.push_back(std::unique_ptr<Name>(new Name(name)));
    //  names.push_back(std::make_unique<Name>(name))

    Grade::searcharray(names);
}
从中获得名称的方法是:

Name *array[]
name
name
的成员,因此必须首先获取
name
对象。然后,您可以添加成员访问权限:

*array[i]
然后您可以使用->快捷方式,其中
(*x).y
x.y
相同:

(*array[i]).name

其他问题:

<> C.代码的1989或1990版本所需的代码风格受到很大影响,您应该尽量避免,因为它使得编写C++代码比它要糟糕得多。 您可以声明一个
等级*
,并立即分配它。您可以将声明与初始化组合为:

array[i]->name
但是你不需要使用指针:使用
等级测试(如果您确实需要指针,则应使用智能指针。切勿使用“裸”新的

同样,在创建名称时,您可以避免
new

Grade *test = new Grade();
这里应该避免使用固定大小的数组。相反,您应该默认使用
std::vector

Name names[10]; // assuming that Name is default constructible
for(...) {
  ...
  name[i] = Name(line);
}
读取输入时,应避免使用
scanf
和固定大小的缓冲区。相反,如果您正在阅读行,您可能应该从
std::getline
std::string
开始

for (int i=0; i<10; ++i)

您忘记为数组编制索引:
array[i]->name
array
类型为
name**
,而
array->name
相当于
(*array)。name
。请使用
std::array
而不是普通的C样式数组。如果不能使用C++11标准功能,请至少使用
std::vector
std::vector<Name> names;
for (...) {
  ...
  names.push_back(Name(line)); // or in C++11 names.emplace_back(line);
}
for (int i=0; i<10; ++i)
std::string line;
while (std::getline(std::cin, line)) { // read as many lines as there are, not just 10 no matter what
  names.emplace_back(line);
}