C ++ ошибка C2662 или как правильно объявить - PullRequest
0 голосов
/ 14 ноября 2011

я получаю следующую ошибку при компиляции программы:

vandenynas.cpp (19) ошибка C2662: 'skaiciavimas :: showst': невозможно преобразовать этот указатель из '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 ]

4 голосов
/ 14 ноября 2011

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

2 голосов
/ 14 ноября 2011

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

...