C ++错误C2662或如何以正确的方式声明

时间:2011-11-14 14:30:10

标签: c++ class declaration

我在编译程序时遇到了以下错误:

  

vandenynas.cpp(19)错误C2662:'skaiciavimas :: showst':无法将'this'指针从'const skaiciavimas'转换为'skaiciavimas&'

有我的课程: first.h

    #pragma once
#include <iostream>
#include <string>
#include "skaiciavimas.h"
using namespace std;
class vandenynas
{
public:

void duomenys (int i, int a, int a0) const;
string GetName()const;
protected:
        skaiciavimas sk;
};

first.cpp

    #include "vandenynas.h"
skaiciavimas::v vektorV;
void vandenynas::duomenys (int i, int a, int a0) const
{
        switch (i)
    {
        case 0:
            vektorV.x=a-a0;
            break;
        case 1:
            vektorV.y=a-a0;
            break;
        default:
            vektorV.z=a-a0;
            break;

    }
 sk.showst(vektorV);
}

第二个叫做function.h

#pragma once
#include <iostream>
#include <string>
using namespace std;
class skaiciavimas
{
public:
    struct v
    {
        int x;
        int y;
        int z;
    };
    void showst(v st);
};

的.cpp

    #include "skaiciavimas.h"

void skaiciavimas::showst(v st)
{
    cout<<st.x<<" "<<st.y<<" "<<st.z<<endl;
}

有人可以在哪里错误吗?

2 个答案:

答案 0 :(得分:4)

问题是您将vandenynas::duomenys声明为const函数,即它不会更改对象中的任何内容。但是它调用skaiciavimas::showst并未声明为const,这是不允许的。如果将一个方法声明为const,则它调用的所有方法本身或作为该对象成员的对象也必须声明为const

答案 1 :(得分:2)

skaiciavimas::showst不是const成员函数。由于vandenynas::duomenys是一个const成员函数,this的所有成员都被认为是const,因此无法调用skaiciavimas::showst