2016-05-05 3 views
-1

Я пытаюсь добавить 2 к переменной класса с помощью функции, но это дает мне этот undefined reference to addTwo(int), хотя я уже объявил это.Вызов функции через main с помощью класса

#include <stdio.h> 
#include <iostream> 

using namespace std; 

class Test { 

    public: 
     int addTwo(int test); 
     int test = 1; 
};  

int addTwo(int test); 

int main() { 

    Test test; 

    cout << test.test << "\n"; 

    addTwo(test.test); 

    cout << test.test; 
} 

int Test::addTwo(int test) { 
    test = test + 2; 
    return test; 
} 
+1

Заявить что-то не определяет его. – MikeCAT

ответ

1

Заданная функция-член int Test::addTwo(int test) действительно отличаются от заявленной глобальной функции int addTwo(int test);, который компилятор ищет.

Чтобы устранить ошибку, определите глобальную функцию или измените вызов глобальной функции на вызов функции-члена.

Чтобы «добавить 2 к переменной класса с помощью функции», вы должны прекратить затенять переменную-член аргументом. (Вы можете использовать this->test для использования переменной-члена, но это не будет необходимо в данном случае)

Попробуйте это:

#include <iostream> 
using namespace std; 

class Test { 

    public: 
     int addTwo(); 
     int test = 1; 
};  

int main() { 

    Test test; 

    cout << test.test << "\n"; 

    test.addTwo(); 

    cout << test.test; 
} 

int Test::addTwo() { 
    test = test + 2; 
    return test; 
} 
+0

Рекомендовать редактирование в первом предложении явным образом явным, что 'addTwo (test.test);' сопоставляется с 'int addTwo (int test);', а не 'int Test :: addTwo (int test);' ** потому что ** 'addTwo (test.test);' не вызывается на объект. – user4581301

0

Поскольку функция член экземпляра test вы должны назвать его в

test.addTwo(test.test);

Вместо этого, вы вызываете его как

addTwo(test.test);

и он не знает, что это за функция. Что касается компилятора, то addTest(int) не существует, потому что вы не определили его вне определения класса.

Смежные вопросы