gpt4 book ai didi

c++ - Cout 不打印字符串名称(没有显示错误)

转载 作者:搜寻专家 更新时间:2023-10-31 01:38:23 26 4
gpt4 key购买 nike

为什么这段代码不打印名字?我在 Animals 构造函数类中定义了名称,但是当我运行代码时它只是忽略了定义。

动物类:

#pragma once

#include <vector>
#include <string>

class Animals
{
private:

std::string name;

std::vector<int> disgust = {1,3,5};
std::vector <int> sleepTime = { 1,3,5 };
std::vector <int> childs = { 1,2,3 };
std::vector<Animals> theAnimals;

int disgustBar;
int sleepBar;
int animalTotal;

bool reproduce;

public:
Animals(std::string name);
~Animals();

void feeding(int i);
void sleeping(int i);
void description();
};

Animals.cpp:

#include "stdafx.h"
#include "Animals.h"
#include <iostream>

Animals::Animals(std::string name)
{
disgustBar = 7;
sleepBar = 7;
}

Animals::~Animals()
{
}

void Animals::feeding(int i)
{
disgustBar += i;
return;
}

void Animals::sleeping(int i)
{
sleepBar += i;
return;
}

void Animals::description()
{
std::cout << "The animal name is " + name << std::endl;
}

主要:

#include "stdafx.h"
#include "Animals.h"
#include <string>
#include <iostream>

int main()
{
Animals a("Allahu");
a.description();

return 0;
}

(第一次发帖,如有错误请见谅)

最佳答案

你只是忘了初始化 name 成员,这样做:

Animals::Animals(std::string name) 
: name(name) // <- init name
{
disgustBar = 7;
sleepBar = 7;
}

建议 1:使用构造函数初始化列表初始化所有成员:

Animals::Animals(std::string name) 
: name(name), disgustBar(7), sleepBar(7)
{}

相关:Constructor initialization Vs assignment

关于标识符名称的注释:

   : name(name)
// ^ ^
// | +---- Constructor argument
// +--------- Class member

建议 2:为避免混淆,我将为类成员使用不同的属性名称。例如“name_”(末尾有下划​​线)。

建议 3:如@Biffen 所述,启用所有警告并且不要忽略警告。

使用 g++ -Wall -Wextra 编译您的代码会显示以下警告:

Animals.cpp:7:1: warning: unused parameter ‘name’ [-Wunused-parameter]
Animals::Animals(std::string name)
^

关于c++ - Cout 不打印字符串名称(没有显示错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32903972/

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