【问题标题】:How can I create an instance of a class within another class?如何在另一个类中创建一个类的实例?
【发布时间】:2020-10-16 21:55:37
【问题描述】:

我已经用 C++ 编写了一个用于 3 维向量代数的类,我想在另一个三角形类中使用它来定义它的顶点。编译我的类时,我得到“Triangle::vert uses undefined class Vec3”。

我将如何解决这个问题?谷歌搜索似乎成员初始化列表可能是解决方案,尽管我似乎无法正确理解。在创建三角形类之前,我可以在 main 中初始化 Vec3 对象并在它们上使用代数函数,但在创建 Triangle 类之后,我不能再在 main 中实例化 Vec3 对象。任何帮助将不胜感激:)

以下是部分相关代码:

Triangle.h

#include "Vec3.h"

class Triangle
{
public:
/*----- Variables -----*/
    Vec3 vert; //Vertices, error occurs here
    unsigned r, g, b; //Color
    
/*----- Constructors -----*/
    Triangle();
};

Triangle.cpp

#include "Triangle.h"

Triangle::Triangle()
{
    vert.x = vert.y = vert.z = 0.0;
    r = g = b = 0;
}

Vec3.h

#include <cmath>

class Vec3
{
public:
    /*----- Variables -----*/
    float x, y, z;

    /*----- Constructors -----*/
    Vec3();
    Vec3(const float a);
    Vec3(const float xx, const float yy, const float zz);

Triangle.cpp

#include "Vec3.h"

/*----- Constructors -----*/
Vec3::Vec3()
{
    Vec3::x = Vec3::y = Vec3::z = 0;
}

Vec3::Vec3(const float a)
{
    Vec3::x = Vec3::y = Vec3::z = a;
}

Vec3::Vec3(const float xx, const float yy, const float zz)
{
    Vec3::x = xx; Vec3::y = yy; Vec3::z = zz;
}

Main.cpp

#include "Vec3.h"
#include "Triangle.h"
#include <iostream>

int main()
{
    Vec3 v1(-2.0f,3.0f,3.0f); //Error here:
    //Line 7: 1. "v1 uses undefined class Vec3"
    //Line 7: 2. "initializing: cannot convert from initializer list to int"
    Triangle t1(1,2,3);
    std::cout << t1.vert.x << " " << t1.vert.y << " " << t1.vert.z;
    return 0;

请注意,我没有粘贴所有函数,因为它们似乎工作正常,而且构造函数和初始化似乎是问题所在。

【问题讨论】:

  • 看起来你有错字,class Triangle { ... };。您发布的代码中缺少最后一个分号。
  • 如果这不是问题,那么说明错误适用于上述代码的哪一行会有所帮助。
  • Vec3.cpp 呢,你是在定义构造函数吗?
  • 我们看不到 Vec3 类的结尾来检查分号。请发布自包含代码!
  • 事实上,我认为您发布的代码中没有包含一些重要的东西,这会导致错误。也许当您尝试将代码缩减为一个独立的示例时,它会编译。让我们知道!

标签: c++ class vector initialization


【解决方案1】:

从您的描述来看,自从您上次成功测试 main 以来,Vec3 似乎发生了一些变化。 为了确保确实如此 - 尝试在没有 Triangle 的情况下重建项目并重新测试 Vec3。

如需进一步帮助,请上传Vec3.cpp的代码,以及Vec3在main上的工作用法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多