**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
3天前关闭。
Improve this question
现在我正在写newObjectArray(int size)
和printTitles(Container *pArr, int size)
函数的代码,用size元素动态分配数组内存,存储在pArr
中打印size字,在pArr[]
的每个元素对象的标题中输入并保存后,pArr[]
的所有对象的标题都应该是输出。printTitles(Container *pArr, int size)
在创建这个函数的过程中,我一直遇到问题。准确地说是cout << pArr[i]->title
。
这部分给出了操作符->
或->*
应用于“Container”而不是指针类型的错误。如何接近并打印对象数组中的字符串?
我应该得到这个作为输出。
我输入 3,3,abc de f,它应该输出abc de f
。
menu? 3
element numbers of Container array[]? 3
Container(): arr = nullptr; size = 0;
Container(): arr = nullptr; size = 0;
Container(): arr = nullptr; size = 0;
input 3 words: abc de f
words: abc de f
这是我写的代码,还没有完成。我试着用pArr[i].title
替换pArr[i]->title
,但这给了我一个不同的错误。
当我这样做时,我得到的错误是 Cannot access member“Container::title”。这就是错误。而在newobjectArray()
中为什么是Container * pArr = nullptr;
。我想知道是否需要此代码。此代码是从问题开始就存在的代码。
#include <iostream>
#include <string>
using namespace std;
/******************************************************************************
* class Container
******************************************************************************/
class Container {
string title;
int size;
int *arr;
public:
Container();
~Container();
void setTitle(string title);
string getTitle();
void newIntArray();
void newArray();
void average();
void rightRotateTitle();
void findDeleteTitle();
void inputIntArray();
};
Container::Container() {
arr = nullptr;
size = 0;
cout << "Container(): arr = " << arr << "; size = " << size << ";" << endl;
}
Container::~Container() {
cout << "~Container(): arr[" << size << "] deleted;" << endl;
}
void Container::setTitle(string title) {
this->title = title;
}
string Container::getTitle() {
return title;
}
void Container::newIntArray() {
cout << "element numbers of int array[]?";
cin >> size;
}
void Container::inputIntArray() {
cout << "input " << size << " integers: ";
int *arr = new int [size];
if (arr==NULL) {
cout << "error" << endl;
return;
}
for (int i = 0; i < size; i++)
cin >> arr[i];
// cin >> (*arr + i)
cout << "arr[" << size << "]: ";
for (int i = 0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
delete [] arr;
}
/******************************************************************************
* Global functions
******************************************************************************/
void constructor() {
Container c;
c.setTitle("constructor-title");
cout << "c.getTitle(): " << c.getTitle() << endl;
}
void intArray() {
Container c;
c.newIntArray();
c.inputIntArray();
//c.average();
}
Container *newObjectArray(int size) {
Container *pArr = nullptr;
Container *pArr1 = new Container [size];
string tmp;
cout << "input 3 words: ";
for (int i = 0; i < size; i++) {
cin >> tmp;
pArr1[i].setTitle(tmp);
}
pArr = pArr1;
return pArr;
}
void printTitles(Container *pArr, int size) {
cout << "words: ";
for (int i = 0; i < size; i++)
cout << pArr[i]->title
}
void objectArray() {
Container *pArr;
int size;
cout << "element numbers of Container array[]? ";
cin >> size;
pArr = newObjectArray(size);
printTitles(pArr, size);
}
void inputTitle(Container* cp) {
string s;
getline(cin, s);
}
void rotateTitle() {
}
void findDelete() {
}
/******************************************************************************
* main()
******************************************************************************/
string menuStr =
"******************************** Main Menu *********************************\n"
"* 0.Exit 1.constructor 2.intArray 3.objectArray 4.rotateTitle 5.findDelete *\n"
"****************************************************************************\n";
int main() {
while (true) {
int menuItem;
cout << endl << menuStr << "menu? ";
cin >> menuItem;
if (menuItem == 0)
break;
switch(menuItem) {
case 1: constructor(); break;
case 2: intArray(); break;
case 3: objectArray(); break;
case 4: rotateTitle(); break;
case 5: findDelete(); break;
}
}
cout << "Good bye!!" << endl;
}
1条答案
按热度按时间nnsrf1az1#
pArr[i]
给你一个索引为i
的对象,这不是一个指针。所以你必须使用.
而不是->
。此外,title
是私有的,尝试getTitle()
代替。你可能想要这样的东西:
另外,如果你想存储 words,比如字符串,那么就使用
std::string
(它也会为你处理大小)。int *arr;
和int size;
可以很好地用于数字数组,但也可以考虑使用std::vector<int> list;
。