如何在类中定义具有n个元素的数组[重复]

Posted

技术标签:

【中文标题】如何在类中定义具有n个元素的数组[重复]【英文标题】:How to define an array with n number of elements inside of a class [duplicate] 【发布时间】:2021-03-31 18:48:20 【问题描述】:

我一直在用 C++ 编写一个程序,用鞋带法计算多边形的表面积。我已经检查了主代码,那部分工作正常。当我尝试将相同的代码放入一个类时,就会出现问题。 这是头文件的代码:

#include "Tacka.h"
class mnogougao
public:
    Tacka* x;
    mnogougao(int n);
    float pertlanje(int n);

这是类的cpp文件的代码

#include "tacka.h"
#include "tackaa.cpp"
#include "mnogougao.h"
mnogougao::mnogougao(int n)
    
    x = new Tacka [n];


float mnogougao::pertlanje( int n)

    int j=n-1;
    float povrsina=0.0;
    
    for(int i=0;i<n;i++)
        
        povrsina+=(x[i].getx()+x[j].getx())*(x[j].gety()-x[i].gety());
        j=i;
        
    
    if(povrsina<0) povrsina*=-1;
    povrsina/=2.0;

    return povrsina;

这是主要代码:

#include <iostream>
#include "Tacka.h"
#include "mnogougao.h"
#include "mnogougao.cpp"
using namespace std;
int main()
    cout<<"Insert number of points of a polygon:"<<endl;
    int n;
    cin>>n;
    mnogougao x(n);

    for(int i=0;i<n;i++) 
        cout<<"Insert coordinates of "<<i+1<<". point of the polygon:"<<endl;
        float a;
        cout<<"X:";
        cin>>a;
        float b;
        cout<<"Y:";
        cin>>b;
        x.x[i].setx(a);
        x.x[i].sety(b);
    
    cout<<"Surface area of a polygon is: "<<x.pertlanje(n)<<endl;
system("pause");

另外,我忘了补充,这是Tacka类头文件的代码

#pragma once

class Tacka

public:
float x,y; 
float getx();
float gety();
void setx(float a);
void sety(float a);
Tacka();
Tacka(float a, float b);
;

这是 Tacka 类的 cpp 文件的代码

#include "tacka.h"
#include <iostream>
using namespace std;
Tacka::Tacka()
x=0.0;
y=0.0;

Tacka::Tacka(float a, float b)

x=a;
y=b;

float Tacka::getx()
return x;

float Tacka::gety()
return y;

void Tacka::setx(float a)
x=a;

void Tacka::sety(float a)
y=a;


它说我在 cpp 文件中的构造函数中出错:error C2533: 'mnogougao::ctor' : constructors not allowed a return type。有人可以向我解释我犯了什么错误吗?我很确定错误是在某个数组中声明了多个元素,但我找不到任何可以帮助我解决问题的东西。

【问题讨论】:

mnogougao x(); -- 这条线的目的是什么? 改用std::vector&lt;Tacka&gt; x;,并在构造函数中使用mnogougao(int n) : x(n) @PaulMcKenzie 这是我主代码中的构造函数。我意识到我忘了正确复制它,所以我在括号内添加了 n。 可能相关或不相关的危险信号:#include "tacka.cpp"#include "mnogougao.cpp"。在不知道确切的错误消息的情况下,也很难诊断,但我怀疑您的 tacka 构造函数中可能有错误。 您永远不应该包含 cpp 文件。 【参考方案1】:

您在类定义的末尾缺少一个分号。

这会触发错误

error C2533: 'mnogougao::ctor': constructors not allowed a return type

在 MSVC (Visual Studio) 中。

Demo

【讨论】:

那是个错误。谢谢你帮助我!

以上是关于如何在类中定义具有n个元素的数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法从数组中打印信息,无法弄清楚如何遍历存储在类中的数组?

在类中定义数组的方法和字段

数据结构:使用面向对象模拟数组

静态类中的向量

创建类时如何定义数组的大小?

如何在类中定义装饰器?