Ошибка C2662 C или как правильно объявить

#c #class #declaration

#c #класс #объявление

Вопрос:

я получаю ошибку fallowing при компиляции программы:

vandenynas.cpp (19) ошибка C2662: ‘skaiciavimas::showst’ : не удается преобразовать ‘этот’ указатель из ‘const skaiciavimas’ в ‘skaiciavimas amp;’

вот мои классы: 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);
}
  

второе, где вызывается функция.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;
}
  

может кто-нибудь сказать, где ошибка?

Комментарии:

1. Пожалуйста, укажите строку, в которой возникает ошибка.

Ответ №1:

Проблема в том, что вы объявляете vandenynas::duomenys как const функцию, то есть это ничего не меняет в объекте. Но он вызывает, skaiciavimas::showst который не объявлен как const , что недопустимо. Если вы объявляете один метод как const , все методы, которые он вызывает, сам по себе или объект, который является членом объекта, также должны быть объявлены как const .

Комментарии:

1. Вы можете вызывать неконстантные методы другого объекта.

2. Извините, теперь я вижу, что объект является членом. Я изменил свой голос.

Ответ №2:

skaiciavimas::showst не является постоянной функцией-членом. Поскольку vandenynas::duomenys это функция-член const, все члены this считаются const и, следовательно, skaiciavimas::showst не могут быть вызваны.

Комментарии:

1. Вы можете вызывать неконстантные методы другого объекта.

2. Извините, теперь я вижу, что объект является членом. Я изменил свой голос.