【问题标题】:C++: calling function from vector object in mainC ++:从main中的向量对象调用函数
【发布时间】:2021-12-31 04:55:22
【问题描述】:

我正在尝试从main() 拨打printTotals()。我试过person.printTotals(),但它不起作用,因为代理只调用vector STL 中的函数。我检查了其他答案,例如C++ Calling Vectors from Function to MainUsing vector of user defined class type objectsHow to create a vector of class objects in C++?

我还检查了我的 STL 书,但这个案例不在其中。

我有两个问题:

  1. 有没有办法在构造函数之外调用printTotals()?我可以从main() 打电话吗?我想保持我的代码干净和模块化,但我无法在构造函数之外访问它。

  2. 每个person 有3 个邻居,由Persons 组成vector。我想过像这样声明neighbors 向量,但不确定:

    vector<Person> neighbor
    

对于 id = 3 的特定人,我如何检索他们的第二个邻居的投票状态?会不会:

    person[3].neighbor[1].getPersonVotingStatus()?

这是我的代码:

人.h

#include <iostream>
#include <string.h>
#include <vector>

class Person
{
   public: 
     Person();
     Person( std::vector<Person> person, maxPersons);
     std::string getPersonVotingStatus(int ID);
     void printTotals();

  private:
    std::string personName;
    float personHeight;
    int personID;
    std::string isVoter;
    vector<Person>neighbor;  // <--- 
}

Person.cpp

#include <iostream>
#include <string.h>
#include <vector>


Person::Person()
{}

Person::Person(int pID, float pHeight, std::string pName, std::string isV)
{
    personID = pID;
    personHeight = pHeight;
    personName = pName;
    isVoter = isV;
}

Person::Person( std::vector<Person> person, int maxPersons)
{
    for(int = 0; i < maxPersons; i++)
    {
       person[i].personID = i;
       person[i].personHeight = i + 100;
       person[i].personName = "testName";

       if (i / 2 = 0) { 
          person[i].isVoter = "yes";
       }
       else {
          person[i].isVoter = "no";
       }
   }
           Person(person[i].personID, person[i].personHeight, person[i].personName, person[i].isVoter);

}

std::String getPersonVotingStatus( int ID)
{
    return person[i].isVoter;
}

void printTotals( std::vector<Person> person)
{
   int totalVoter = 0;
   int totalNonvoter = 0;
   
   for (int i = 0; i< person.size(); i++)
      if (person[i].isVoter == "yes") {
        totalVoter++;
   }
   else {
     totalNonvoter++;
  }  
}

main.cpp

#include <iostream>
#include <string.h>
#include <vector>

int main()
{
  int maxPersons = 10;

  std::vector<Person> person;
  Person obj( person, maxPersons);

  person.printTotals(); // <--

  return 0;
}

【问题讨论】:

  • 非静态成员函数作用于对象,而不是类型。所以你(在main())可以做obj.printTotals()或者你可以迭代person的元素并调用每个元素的成员函数,例如for (Person &amp;individual : person) individual.printTotals();
  • 注意:它不起作用是无用的信息。如果它有效,你就不会问这个问题了,对吗?而是重现错误(将其作为文本剪切并粘贴到问题中)或您看到的不当行为。

标签: c++ vector


【解决方案1】:

尝试将printTotals() 定义为静态函数:

class Person
{
   public: 
     static void printTotals(std::vector<Person> person);
}

然后你可以像这样在 main 中调用它:

Person::printTotals(person);

【讨论】:

  • 不一定是静态函数,独立的函数也可以。但是你应该通过引用而不是值来传递向量。
猜你喜欢
  • 1970-01-01
  • 2021-03-15
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 2013-05-28
相关资源
最近更新 更多