我在编译程序时遇到了以下错误:
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;
}
有人可以在哪里错误吗?
答案 0 :(得分:4)
问题是您将vandenynas::duomenys
声明为const
函数,即它不会更改对象中的任何内容。但是它调用skaiciavimas::showst
并未声明为const
,这是不允许的。如果将一个方法声明为const
,则它调用的所有方法本身或作为该对象成员的对象也必须声明为const
。
答案 1 :(得分:2)
skaiciavimas::showst
不是const成员函数。由于vandenynas::duomenys
是一个const成员函数,this
的所有成员都被认为是const,因此无法调用skaiciavimas::showst
。