我有一个标题,cpp和主要类。
//Arr.h
class Arr
{
public:
void setArr();
void printArr();
private:
int x[5];
};
//Arr.cpp
#include "Arr.h"
#include <iostream>
using namespace std;
void Arr::setArr()
{
int x[5] = { 2, 3, 5, 7, 11 };
}
void Arr::printArr()
{
for (int i = 0; i < 5; i++)
{
cout << x[i] << "\n";
}
}
//main.cpp
int main()
{
Arr a;
a.setArr();
a.printArr();
}
但是,当我运行代码时,a.printArr()会打印出数组地址,而不是数组中包含的值。有办法解决这个问题吗?
答案 0 :(得分:1)
您的代码将打印不是地址,但通过默认初始化生成一些不确定的值。初始化成员数组而不是本地数组要扔掉。
void Arr::setArr()
{
x[0] = 2;
x[1] = 3;
x[2] = 5;
x[3] = 7;
x[4] = 11;
}
答案 1 :(得分:0)
你的问题在这里:
void Arr::setArr()
{
int x[5] = { 2, 3, 5, 7, 11 };
}
声明int x[5]
定义了一个包含5个元素的新数组,这些元素将在退出该函数时被销毁;名称x
隐藏了数据成员Arr::x
。
你能做到的一种方法是:
void Arr::setArr()
{
/*static*/ auto arr = { 2, 3, 5, 7, 11 };
std::copy(arr.begin(), arr.end(), x);
}
完整代码:
#include <iostream>
#include <algorithm>
class Arr
{
public:
void setArr();
void printArr();
private:
int x[5];
};
using namespace std;
void Arr::setArr()
{
/*static*/ auto arr = { 2, 3, 5, 7, 11 };
std::copy(arr.begin(), arr.end(), x);
}
void Arr::printArr()
{
for (int i = 0; i < 5; i++)
{
cout << x[i] << "\n";
}
}
//main.cpp
int main()
{
Arr a;
a.setArr();
a.printArr();
}
答案 2 :(得分:0)
您的代码不是打印数组地址。也许你看到了一些意想不到的数字并假设它是一个地址,但实际上它是undefined behaviour输出未初始化的变量引起的。
您的代码int x[5] = ....
失败,因为它声明了一个新的局部变量x
,它不会修改类成员x
。
也许你试过了:
x = { 2, 3, 5, 7, 11 };
并出现编译错误。这是因为可能不会分配C样式的数组。这个恼人的规则是C ++过去的遗留问题。要避免此问题和许多其他问题,您可以尝试避免使用C样式数组。在这种情况下使用C ++数组:
private:
std::array<int, 5> x;
然后建议的作业将有效。
答案 3 :(得分:0)
正如WhiZTiM已经指出的那样,你的问题出在你班级的setArr函数中。原因是因为在C ++中你无法以正常的方式将数值赋值给数组。即使用x = {blah, blah, blah};
(除非您使用std::array<int, ARRAYSIZE>
)。在setArr中,您正在创建另一个名为x
的数组,然后一旦超出范围就删除该数组,并且在printArr
中您正在打印一个没有值的数组。
数组中的每个值必须在C样式数组中单独设置(如MikeCAT的回答所示)。
对此的一个解决方案是创建一个包含所需值的临时数组,并通过for循环将值分配给类数组,即:
void Arr::setArr() {
const int ARRAYSIZE = 5;
int tmp[ARRAYSIZE] = {2, 3, 5, 7, 11};
for (int i = 0; i < ARRAYSIZE; ++i) {
x[i] = tmp[i];
}
}
正如MM也指出的那样,只需将Arr中的私有变量中的int x[5]
更改为std::array<int, 5> x
,然后在setArr中只需要声明:x = {2, 3, 5, 7, 11};
这是我的更好选择意见和更容易阅读,但知道如何使用C数组