C++错误:无法将指针转换为引用(Netbeans)
C++ error: could not convert pointer to reference (Netbeans)
好的,我不确定我是否正确命名了这个,但问题出在这里。我一直试图将一个包含用户定义的Course对象的数组传递给函数,但它给了我错误"无法转换'(Course*)(&courseCatalog)'"。此外,如果我的代码有点难以阅读,也很抱歉。很多都被评论掉了,所以我可以测试一些东西。
我的主页:
#include "cc.h"
int main(int argc, char** argv) {
bool again=1;
Course c;
ifstream catalogIn("catalog.dat");
ofstream catalogOut("catalog.dat");
Course courseCatalog[256];
loadInCourses(catalogIn, courseCatalog);
courseCatalog[getNumCourses(courseCatalog)+1]=addCourse();
loadOutCourses(catalogOut, courseCatalog);
return 0;
}
我的功能:
#include "cc.h"
int displayMainMenu(){
int choice;
cout<<endl<<"**********MAIN MENU**********"<<endl;
cout<<"1. Print List Schedule"<<endl;
cout<<"2. Print Weekly Schedule"<<endl;
cout<<"3. Get Course"<<endl;
cout<<"4. Advanced Options"<<endl;
cout<<"0 to Quit"<<endl;
cout<<"*****************************"<<endl<<endl;
cout<<"Menu Choice: ";
cin>>choice;
return choice;
}
int displayAdvMenu(){
int choice;
cout<<endl<<"**********ADV MENU**********"<<endl;
cout<<"1. Add Course to Catalog"<<endl;
cout<<"2. Remove Duplicates"<<endl;
cout<<"0 to go Back"<<endl;
cout<<"****************************"<<endl<<endl;
cout<<"Menu Choice: ";
cin>>choice;
return choice;
}
Course addCourse(){
Course course;
cout<<"nCourse name:tt";
cin.ignore();
cin.getline(course.name, CNAMESIZE);
cout<<"Course ID:tt";
cin.getline(course.id, CIDSIZE);
cout<<"Number of credits:t";
cin>>course.credits;
return course;
}
void loadInCourses(ifstream & ifs, Course courseCatalog[]){
int i=0;
while(ifs>>courseCatalog[i].credits){
ifs.getline(courseCatalog[i].name, CNAMESIZE, ',');
ifs.getline(courseCatalog[i].id, CIDSIZE, ',');
ifs.getline(courseCatalog[i].professor, CPROFSIZE, ',');
ifs.getline(courseCatalog[i].semester, CSEMSIZE, ',');
ifs.get(courseCatalog[i].grade);
i++;
}
return;
}
void loadOutCourses(ofstream & ofs, Course courseCatalog[]){
for(int i=0; i<=getNumCourses(courseCatalog); i++){
ofs<<courseCatalog[i].credits<<
courseCatalog[i].name<<","<<
courseCatalog[i].id<<","<<
courseCatalog[i].professor<<","<<
courseCatalog[i].semester<<","<<
courseCatalog[i].grade<<endl;
}
}
Course findCourse(ifstream & ifs){
char attribute;
string needle;
int credits;
int name;
int id;
bool again=1;
int numLines = getNumLines(ifs);
cout<<"Search by (N)ame or (I)d? ";
cin>>attribute;
while(again){
switch(attribute){
case 'N': case 'n':
cout<<"Enter name of course: ";
cin>>name;
for(int i=0; i<numLines; i++){
}
break;
case 'I': case 'i':
cout<<"Enter course ID: ";
cin>>id;
break;
default:
cout<<"Invalid Attribute. Try Again."<<endl;
}
}
}
int getNumCourses(Course courseCatalog[]){
int numcourses=0;
for(int i=0;courseCatalog[i].credits!=0;i++){
numcourses++;
}
return numcourses;;
}
int getNumLines(ifstream & ifs){
char line[1];
int count=0;
while(ifs.getline(line, 1)){
count++;
}
ifs.close();
return count;
}
ostream& operator<<(ostream& os, const Course c){
os<<endl<<c.name<<endl<<c.id<<endl<<c.credits<<" cr hrs"<<endl;
return os;
}
我的头文件:
#ifndef CC_H
#define CC_H
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
const int PREREQ_SIZE = 15;
const int POSTREQ_SIZE = 15;
const int CNAMESIZE=40;
const int CIDSIZE=15;
const int CPROFSIZE=40;
const int CSEMSIZE=15;
struct Course{
char name[CNAMESIZE];
char id[CIDSIZE];
int credits;
char professor[CPROFSIZE];
char semester[CSEMSIZE];
char grade;
float timeStart;
float timeStop;
friend ostream& operator<<(ostream& os, const Course c);
};
Course addCourse();
int displayMainMenu();
int displayAdvMenu();
void printString(Course c);
void loadInCourses(ifstream & ifs, Course courseCatalog);
void loadOutCourses(ofstream & ofs, Course courseCatalog);
Course findCourse(ifstream & ifs);
int getNumCourses(Course courseCatalog[]);
int getNumLines(ifstream & ifs);
#endif
更新#1:
#include "cc.h"
int main(int argc, char** argv) {
bool again=1;
Course c;
char catalogFilename[128]="catalog.dat";
ifstream catalogIn(catalogFilename, ios_base::app);
ofstream catalogOut(catalogFilename, ios_base::app);
Course courseCatalog[256];
loadInCourses(catalogIn, courseCatalog);
courseCatalog[getNumCourses(courseCatalog)+1]=addCourse();
loadOutCourses(catalogOut, courseCatalog);
return 0;
}
功能:
#include "cc.h"
int displayMainMenu(){
int choice;
cout<<endl<<"**********MAIN MENU**********"<<endl;
cout<<"1. Print List Schedule"<<endl;
cout<<"2. Print Weekly Schedule"<<endl;
cout<<"3. Get Course"<<endl;
cout<<"4. Advanced Options"<<endl;
cout<<"0 to Quit"<<endl;
cout<<"*****************************"<<endl<<endl;
cout<<"Menu Choice: ";
cin>>choice;
return choice;
}
int displayAdvMenu(){
int choice;
cout<<endl<<"**********ADV MENU**********"<<endl;
cout<<"1. Add Course to Catalog"<<endl;
cout<<"2. Remove Duplicates"<<endl;
cout<<"0 to go Back"<<endl;
cout<<"****************************"<<endl<<endl;
cout<<"Menu Choice: ";
cin>>choice;
return choice;
}
Course addCourse(){
Course course;
cout<<"nCourse name:tt";
cin.ignore();
cin.getline(course.name, CNAMESIZE);
cout<<"Course ID:tt";
cin.getline(course.id, CIDSIZE);
cout<<"Number of credits:t";
cin>>course.credits;
/*<<"Enter semester: ";
cin.getline(course.semester);
for(int i=0; i<PREREQ_SIZE && choice==1; i++){
bool choice;
cout<<"Add PreReq?: ";
cin>>choice;
if(choice==1){
...
}
}
for(int i=0; i<POSTREQ_SIZE && choice==1; i++){
bool choice;
cout<<"Add PostReq?: ";
cin>>choice;
if(choice==1){
...
}
} */
return course;
}
void loadInCourses(ifstream & ifs, Course courseCatalog[]){
cout<<"b*"<<endl<<courseCatalog[0];
int i=0;
while(ifs>>courseCatalog[i].credits){
ifs.getline(courseCatalog[i].name, CNAMESIZE, ',');
ifs.getline(courseCatalog[i].id, CIDSIZE, ',');
ifs.getline(courseCatalog[i].professor, CPROFSIZE, ',');
ifs.getline(courseCatalog[i].semester, CSEMSIZE, ',');
ifs.get(courseCatalog[i].grade);
i++;
cout<<"d*"<<endl<<courseCatalog[i];
}
cout<<"c*"<<endl<<courseCatalog[0];
return;
}
void loadOutCourses(ofstream & ofs, Course courseCatalog[]){
for(int i=0; i<=getNumCourses(courseCatalog); i++){
ofs<<courseCatalog[i].credits<<
courseCatalog[i].name<<","<<
courseCatalog[i].id<<","<<
courseCatalog[i].professor<<","<<
courseCatalog[i].semester<<","<<
courseCatalog[i].grade<<endl;
}
}
Course findCourse(ifstream & ifs){
char attribute;
string needle;
int credits;
int name;
int id;
bool again=1;
int numLines = getNumLines(ifs);
cout<<"Search by (N)ame or (I)d? ";
cin>>attribute;
while(again){
switch(attribute){
case 'N': case 'n':
cout<<"Enter name of course: ";
cin>>name;
for(int i=0; i<numLines; i++){
}
break;
case 'I': case 'i':
cout<<"Enter course ID: ";
cin>>id;
break;
default:
cout<<"Invalid Attribute. Try Again."<<endl;
}
}
}
int getNumCourses(Course courseCatalog[]){
int numcourses=0;
for(int i=0;courseCatalog[i].credits!=0;i++){
numcourses++;
}
return numcourses;;
}
int getNumLines(ifstream & ifs){
char ch;
int count=0;
while(ch=ifs.get()){
count+=(ch=='n'?1:0);
}
ifs.close();
return count;
}
ostream& operator<<(ostream& os, const Course c){
os<<endl<<c.name<<endl<<c.id<<endl<<c.credits<<" cr hrs"<<endl;
return os;
}
标题:
#ifndef CC_H
#define CC_H
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
const int PREREQ_SIZE = 15;
const int POSTREQ_SIZE = 15;
const int CNAMESIZE=40;
const int CIDSIZE=15;
const int CPROFSIZE=40;
const int CSEMSIZE=15;
struct Course{
char name[CNAMESIZE];
char id[CIDSIZE];
int credits;
char professor[CPROFSIZE];
char semester[CSEMSIZE];
char grade;
float timeStart;
float timeStop;
friend ostream& operator<<(ostream& os, const Course c);
};
Course addCourse();
int displayMainMenu();
int displayAdvMenu();
void printString(Course c);
void loadInCourses(ifstream & ifs, Course courseCatalog[]);
void loadOutCourses(ofstream & ofs, Course courseCatalog[]);
Course findCourse(ifstream & ifs);
int getNumCourses(Course courseCatalog[]);
int getNumLines(ifstream & ifs);
#endif /* CC_H */
在cc.h
中,这些行:
void loadInCourses(ifstream & ifs, Course courseCatalog);
void loadOutCourses(ofstream & ofs, Course courseCatalog);
应该是
void loadInCourses(ifstream & ifs, Course courseCatalog[]);
void loadOutCourses(ofstream & ofs, Course courseCatalog[]);
此外,getNumLines
中存在逻辑错误。如果istream::getline
函数在到达行的末尾之前填充了缓冲区,则不会丢弃行的其余部分。你将在接下来的阅读中得到这行的其余部分。
相反,您可以只执行ifs.get()
并计算发生了多少n
。
此功能关闭ifs
。它只从findCourse
调用,而findCourse
从未被调用过。但是,当您调用findCourse
时,请注意,如果您想再次读取(或重新打开)文件,则需要将流倒回起始位置。
您的错误应该有两部分,不能从。。。和…
你正在从。。函数签名定义了到…
两者不一样。您必须更改函数签名以匹配传入的From,或者修改传递的内容以匹配函数原型定义的to。
你会发现阅读整个错误是最有帮助的,你可能会认为发布整个错误值得额外的时间,因为向我们展示部分错误几乎毫无意义。这会给你带来毫无意义的评论。。
如果你的after是一个函数,它将指针指向Course的任何数组,那么你可能应该这样称呼它:
Course (*courseCatalog)[]
或者简单地说:
课程*couseCatalog
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- 尝试构建 xerces c++ 解析器。Netbeans 和命令行构建错误未定义对"xercesc_3_2..."的引用
- 未定义对"WinMain"的引用:使用 Cygwin、SDL2 和 Netbeans 时
- C++嵌入对"luaL_newstate"的lua 5.2未定义引用(ubuntu 14.04,Netbeans)
- 尽管netbeans在代码完成中显示了函数,但未定义引用
- Netbeans可以找到头,但不能引用函数(Netbeans/c++)
- 将Netbeans(C++)与G++一起使用时出现未定义的引用错误
- c++和Netbeans的未定义引用问题
- NetBeans 7.0.1 C++ - 使用静态库,"未定义的引用"
- g++错误:netbeans在linux中编译时未定义引用
- C++错误:无法将指针转换为引用(Netbeans)
- 体系结构的未定义符号x86_64:"_glutInit",引用自:_main in main.o / Netbeans on Mac