首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >似乎无法通过调用代理类中的for循环从主目录中打印字符串数组(agents.cpp)。

似乎无法通过调用代理类中的for循环从主目录中打印字符串数组(agents.cpp)。
EN

Stack Overflow用户
提问于 2019-02-20 10:31:09
回答 1查看 25关注 0票数 1

我试着打印数组到屏幕上。不幸的是,它打印了4行空白行。

代码语言:javascript
复制
// CarWarhouse.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include "pch.h"
#include <string>
#include <iostream>

#include "agents.h"

using namespace std;

int main()
{
    string agentName;
    int agentID;

    agents A_1;

    cout << "Administrative login: ";
    cin >> agentName;
    A_1.setAgentName(agentName);
    cout << "Administrative password: ";
    cin >> agentID;

    while (agentID != A_1.getAgentID())
    {
        cout << "Invalid login\n";

        cout << "\nAdministrative password: ";
        cin >> agentID;
    }

    cout << endl << "Welcome back, Agent " << endl;

    cout << "Active Agents: " << endl;

    A_1.agentIdentities(); //Function call to agents.cpp

}

agents.cpp

#include "pch.h"
#include "agents.h"
#include <string>

agents::agents() {
    agentName = "";
    agentID = 1111;
    int const size = 4;
    string agentMembers[size] = { "Jacob", "Nathan", "Tomas", "Jack" }; //Agent members string array I want to print to screen.
}

agents::agents(string name, int ID)
{
    agentName = name;
    agentID = ID;
}

agents::~agents()
{}


string agents::getAgentName() const
{
    return  agentName;
}

int agents::getAgentID() const
{
    return agentID;
}

void agents::setAgentName(string incoming)
{
    agentName = incoming;
}

void agents::setAgentIdentity(int ID)
{
    agentID = ID;
}

void agents::agentIdentities() //Main calls this function.
{
    for (int i = 0; i < size; i++)
    {
        cout << agentMembers[i] << endl;
    }

    cout << agentMembers[0];
}


#pragma once

#include <iostream>
#include <string>

using namespace std;

#ifndef agents_h
#define agents_h

class agents{

public:
    //First thing, default constructor
    agents();

    //Overload Constructor
    agents(string, int);

    //Destructor

    ~agents();

    //Accessor Functions

    //If accessor doesn't modify member variables, end with const on the function name.

    string getAgentName() const;
        //getName returns name of the customer.

    int getAgentID() const;


    void setAgentName(string);
    //getName returns the newly assigned customer reference number.

    void setAgentIdentity(int);

    void agentIdentities();
    //Retrieves agent identites (names within the string array).

private:
    //Member variables
    string agentName;
    int agentID;
    string agentMembers[4];
    int size = 4;
};

#endif

我已经在代码中确定了关键感兴趣的三个领域。我尝试使用从main到agents.cpp的函数调用从main打印字符串数组。

每次我运行这段代码时,它都会打印4行空白行,我对c++相当陌生,因为这是我在大学的第四个星期。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-20 10:42:03

这是错误(非常常见的新手错误)。

代码语言:javascript
复制
agents::agents() {
    agentName = "";
    agentID = 1111;
    int const size = 4;
    string agentMembers[size] = { "Jacob", "Nathan", "Tomas", "Jack" }; 
}

它应该是

代码语言:javascript
复制
agents::agents() {
    agentName = "";
    agentID = 1111;
    size = 4;
    agentMembers = { "Jacob", "Nathan", "Tomas", "Jack" }; 
}

您的代码声明了名为sizeagentMembers的新变量,它们与类中声明的变量完全无关(除了具有相同的名称)。这就是为什么构造函数不更新类变量的原因,因为所设置的只是一些局部变量,一旦构造函数退出,这些局部变量就不再存在。

但是,由于我们在构造函数的顶部,因此值得指出的是,初始化类变量的最佳方法是使用initialiser列表

代码语言:javascript
复制
agents::agents() : agentName(""), agentID(1111), size(4),
    agentMembers{ "Jacob", "Nathan", "Tomas", "Jack"} {
}

这个版本用给定的值初始化类变量,您的版本有两个步骤,首先默认初始化类变量,然后将给定的值分配给变量。这是低效率和没有理由不喜欢初始化列表版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54784150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档