【发布时间】:2021-12-31 04:55:22
【问题描述】:
我正在尝试从main() 拨打printTotals()。我试过person.printTotals(),但它不起作用,因为代理只调用vector STL 中的函数。我检查了其他答案,例如C++ Calling Vectors from Function to Main 和Using vector of user defined class type objects 和How to create a vector of class objects in C++?。
我还检查了我的 STL 书,但这个案例不在其中。
我有两个问题:
-
有没有办法在构造函数之外调用
printTotals()?我可以从main()打电话吗?我想保持我的代码干净和模块化,但我无法在构造函数之外访问它。 -
每个
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 &individual : person) individual.printTotals(); -
注意:它不起作用是无用的信息。如果它有效,你就不会问这个问题了,对吗?而是重现错误(将其作为文本剪切并粘贴到问题中)或您看到的不当行为。