0

当我将函数 print 与其他所有内容一起放入 pointerStruct.cpp 时,它工作正常,但是当我尝试将函数分离到头文件中时,我不再能够找出问题所在。任何想法都会很棒。

指针结构.cpp

#include<iostream>
#include<string.h>
#include "pointerStru.h"

using namespace std;

struct student
{
       char name[20];
       int num;
       float score[3];
};

int main()
{
       struct student stu;
       PointerStru pstttt;

       stu.num=12345;
       strcpy(stu.name,"li li");
       stu.score[0]=67.5;
       stu.score[1]=89;
       stu.score[2]=78.6;

       pstttt.print(&stu);
}
//pointerStru.h
#ifndef PointerStru_H_INCLUDED
#define PointerStru_H_INCLUDED
#include <iostream>

using namespace std;

class PointerStru{

    private:

    public:
        void print(struct student *p)
        {
            cout << "*p " << p << endl;
            cout<<p->num<<"\n"<<p->name<<"\n"<<p->score[0]<<"\n"
                    <<p->score[1]<<"\n"<<p->score[2]<<"\n";
            cout<<" ";
        }

};


#endif // PointerStru_H_INCLUDED
4

3 回答 3

2

的定义struct student在头中使用之前没有定义。要么将其包含在标头中,要么将其声明为不透明结构并PointerStru::print在 .cpp 文件中定义实现(在定义之后struct student)。

在一个不相关的注释中,using namespace std;头文件是错误的和邪恶的。永远不要这样做。

于 2013-10-23T05:24:18.170 回答
0

如果将 print 方法的定义放在头文件中,那么编译器只知道 student 是一个结构(从 print 参数列表,当它被声明为结构时),但不知道这个结构是如何定义的(定义稍后在 cpp 文件中)。在这种情况下,编译器将其视为不完整类型并引发错误。

如果您在学生结构定义下方的 cpp 文件中定义打印方法,编译器将能够编译代码(它知道学生结构是如何定义的,然后才显示在打印方法中)。

于 2013-10-23T08:12:53.603 回答
0

你可以像这样使用它

//pointerStru.h
#ifndef PointerStru_H_INCLUDED
#define PointerStru_H_INCLUDED
#include <iostream>

struct student;

class PointerStru{

private:

public:
    void print(struct student *p);

};


#endif // PointerStru_H_INCLUDED

#include<iostream>
#include<string.h>
#include "pointerStru.h"

using namespace std;

struct student
{
   char name[20];
   int num;
   float score[3];
};

void PointerStru::print(struct student *p)
{
   cout << "*p " << p << endl;
   cout<<p->num<<"\n"<<p->name<<"\n"<<p->score[0]<<"\n"
        <<p->score[1]<<"\n"<<p->score[2]<<"\n";
   cout<<" ";
}

int main()
{
   struct student stu;
   PointerStru pstttt;

   stu.num=12345;
   strcpy(stu.name,"li li");
   stu.score[0]=67.5;
   stu.score[1]=89;
   stu.score[2]=78.6;

   pstttt.print(&stu);
}
于 2013-10-23T08:34:19.890 回答