用户创建的类对象实例化的未声明标识符

Posted

技术标签:

【中文标题】用户创建的类对象实例化的未声明标识符【英文标题】:undeclared identifier for user created class object instantiation 【发布时间】:2018-03-27 16:24:47 【问题描述】:

所以我正在努力创建一个由矩形组成的立方体,由点组成的线组成。我做了一件你永远不应该做的事情,在第一次运行之前写下整个事情。下面是一个精简版本,用于发现第一个错误。

这是在 Visual Studio 中,所以这可能是严格意义上的 Visual Studio 问题。我不知道。我没有在fedora中测试过它来验证。

这里是 Point_class.h:

#pragma once

#ifndef POINT_H
#define POINT_H

class PointType

private:
    int x;
    int y;
    int z;
public:
    PointType(int i=0, int j=0, int k=0);
    void get_point(int& i, int &j, int& k) const;
    void set_point(int i, int j, int k);
;


#endif /* POINT_H */

这里是 Point_class.cpp:

#include "stdafx.h"
#include "Point_class.h"

PointType::PointType(int i, int j, int k)

    x = i;
    y = j;
    z = k;


void PointType::get_point(int& i, int &j, int& k) const 

    i = x;
    j = y;
    k = z;


void PointType::set_point(int i, int j, int k)

    x = i;
    y = j;
    z = k;

这是主要的 cpp 文件:

#include <iostream>
#include "Point_class.h"
#include "stdafx.h"


int main()

    PointType p1;
    PointType p2(8, 0, 0);
    PointType p3(0, 9, 0);
    PointType p4(0, 0, 6);
    return 0;

我得到的第一个错误是主程序第 10 行的 C2065 未声明标识符,第二个错误是同一行的错误 2146(在标识符 p1 之前应为“;”)。所有其他错误只是那个错误的重复。

点类的头文件和 cpp 文件都已添加到源文件中。我不确定在 Visual Studio 中编译是如何工作的(我认为添加源文件后它会自动完成。我知道如果我使用的是终端,我只需要在使用 g++ 时指定这些文件。任何指针都会有所帮助。

编辑:从头文件中删除“#include”stdafx.h“”。重新运行只是为了确定,但没有改变。

【问题讨论】:

请显示完整的错误。请显示它抱怨的文件。请指出其抱怨的行 #include "stdafx.h" 如果您使用的是precompiled headers,那么您必须首先将它们包含在 cpp 文件中 另外pointclass.h与主文件Point_class.h中的Point_class.h不一样 最后一个是错字,刚刚改正。我检查以确保文件名称正确。 我想知道 point_h 是否已经定义。既然你有“pragma once”,就把包含警卫拿出来 【参考方案1】:

所以我找到了错误的根源。我注意到最后的错误列表中有一个不同的错误,指向 point_class 实现文件,说明已到达文件末尾。所以我在包含列表的末尾添加了#include "stdafx.h"。这导致了一系列新错误,当我将包含的位置更改为第一行时,这些错误很快就消失了,以及原始错误。这促使我尝试将#include "stdafx.h" 放在主文件的开头,从而使程序正常运行。

感谢 Raxvan,你给了我尝试移动那条线的想法。

【讨论】:

以上是关于用户创建的类对象实例化的未声明标识符的主要内容,如果未能解决你的问题,请参考以下文章

更改使用 loadNibNamed 实例化的类

类对象

python 元类

设计模式学习笔记-创建型模式总结

effective java学习笔记之不可实例化的类

软件设计与体系结构——创建型模式