Передача объекта в качестве параметра в C ++ - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время я сталкиваюсь с несколькими проблемами, связанными с передачей возвращаемого значения объекта через функцию. Моя функция создана в .h и определена в .cpp. функция, например, Class::function(int value); принимает целое число значения. Когда я вызываю объект objectName name; и передаю его как Class::function(name);.

// foo.h
class foo
{
     void function(int value);
}


//foo.cpp
void foo::function(int value)
{
     // CODE HERE
}


//main.cpp
int main()
{
     objectName name;
     foo::function(name);
}

Ошибки, которые я получаю, имеют вид:

Main.cpp: 43: 23: ошибка: нет соответствующей функции для вызова 'class :: function (objectName &)' name.function (name);// передает значение в функцию

Ответы [ 3 ]

2 голосов
/ 04 ноября 2019

Вызов foo::function(name); является тройным неверным.

  1. Это вызов статической функции, но function не является статическим, поэтому вам нужен экземпляр foo для вызова функции:
foo myFoo;
myFoo.function(0);
function является приватным, поэтому его нельзя использовать вне foo. Все члены класса по умолчанию являются закрытыми, поэтому вам нужно объявить его как открытый:
class foo {
  public:
    void function(int);
}
function принимает в качестве параметра int, но вы передаете некоторый объект типа objectName. Это вопрос дизайна, какой параметр должен принимать function? int или objectName? Может быть, вы хотите
//header
class foo {
  public:
    void function(objectName &);
}

// cpp
void foo::function(objectName &value) {
}
0 голосов
/ 04 ноября 2019

Я вижу выделенную переменную с именем name, и она имеет тип objectName.

Я не вижу выделения каких-либо других объектов, особенно типа foo.

Вы не можете вызвать метод класса, например foo::function(), без объекта типа foo. (кроме статических объявлений, которые вы не используете и не нуждаетесь)

В основном, эта ошибка, которую вы видите, заключается в том, что у вас есть только метод класса, который принимает параметр int, и нет функции, которая принимает параметртипа objectName.

0 голосов
/ 04 ноября 2019

Объявление и определение foo правильные. Однако, это не то, как вы создаете и используете объекты в C ++.

int main() {
  foo foo_obj; // Create an object of type 'foo' named 'foo_obj'
  foo_obj.function(1); // call function named 'function' on the object 'foo_obj' 
                       // and pass integer (=1) as an argument

  return 0;
}

Вам определенно стоит взять хорошую C ++ книгу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...