【发布时间】:2015-03-27 17:02:42
【问题描述】:
当我们使用指向类的“双”指针时,我们在构造函数中用参数写了什么?我们是否使用一个指针来分配内存?
这里是代码。它无法编译,我不明白为什么。感谢您的帮助。
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
class Article{
private:
char title[100];
char author[50];
char *content;
bool publish;
public:
Article(char *title="", char *author="", char *content="", bool publish=0){
strcpy(this->title, title);
strcpy(this->author, author);
this->content=new char[strlen(content)+1];
strcpy(this->content, content);
this->publish=publish;
}
void show(){
cout<<title<<endl;
cout<<author<<endl;
cout<<content<endl;
}
~Article(){
delete [] content;
}
};
class Newspaper{
private:
char name[100];
Article **p;
int articles;
Article first;
public:
Newspaper(char *name="", Article **p=Article(), int articles=0, Article first=Article()){
strcpy(this->name, name);
}
};
int main() {
char title[100], author[50], content[100];
int n;
cin >> n;
char name[100];
cin.getline(name, 100);
cin.getline(name, 100);
Article first("VAZNO","OOP","Vezba:OOP",true);
Newspaper v(name,first);
Article **s = new Article*[n];
for(int i = 0; i < n; ++i) {
cin.getline(title, 100);
cin.getline(author, 50);
cin.getline(content, 100);
v.addArticle(Article(title, author, content, true)); //se koristi copy konstruktor
}
v.showFirst();
v.showLongest();
cout << v.totalofauthor(author) << endl;
for(int i = 0; i < n; ++i) {
delete s[i];
}
delete [] s;
return 0;
}
【问题讨论】:
-
pastebin.com/cy6p6Pf4 这是代码 :)
-
请从该代码创建一个最小示例并将其放入问题中
-
如果你只使用
std::string和std::vector,你可能会解决你所有的错误,还有更多你还没有找到的错误 -
您的语法不正确:
Article **p=Article()。您想要其中之一:Article p = Article()或Article *p = new Article或Article * * p = 0。最好不要使用动态内存,因为内存管理很困难(何时删除指针,谁拥有目标,有多少指针指向对象等)。 -
一个最小的例子。伙计,现在选择性阅读风靡一时!
标签: c++ class pointers constructor