Arhn - архитектура программирования

Нерешенная проблема с токеном C++

Я делаю программу для класса, и учитель дал нам файл Cpp, который мы должны были реализовать. Все было написано им, кроме Main, но я получаю странную ошибку. Любая помощь будет здорово. Вот мой код.

// **************************************************************************
//
// Counter.cpp
//
// Defines and tests class CounterType, which is used to count things.
// CounterType contains both a default constructor and a constructor that
// sets the count to a specified value, plus methods to increment, decrement,
// return, and output the count.  The count is always nonnegative.
//
// **************************************************************************
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

class CounterType
{
public:
    CounterType();
    //Initializes the count to 0.

    CounterType(int initCount);
    //Precondition: initCount holds the initial value for the count.
    //Postcondition:
    //  If initCount > 0,initializes the count to initCount.
    //  If initCount <= 0,initializes the count to 0.

    void increment();
    //Postcondition:
    //  The count is one more than it was.

    void decrement();
    //Postcondition:
    //  If the count was positive, it is now one less than it was.
    //  If the count was 0, it is still 0

    int getCount();
    void output(ostream& outStream);
    //Precondition: outStream is ready to write to
    //Postcondition: count has been written to outStream

private:
    int count;

};

 void increment();
 void decrement();
 int getCount();
 void output(ostream& outStream);

 int main()
{
    CounterType Test;

    increment();
    decrement();
    getCount();

}

CounterType::CounterType()
{
    count = 0;
}

CounterType::CounterType(int initCount)
{
    if (initCount >= 0)
        count = initCount;
    else
        count = 0;
}

void CounterType::increment()
{
    count++;
}

void CounterType::decrement()
{
    if (count > 0)
        count--;
}

int CounterType::getCount()
{
    return count;
}

void CounterType::output(ostream& outStream)
{
    outStream << count;
}

И вот ошибка.

Ошибка 1 ошибка LNK2028: неразрешенный токен (0A000330) "void __cdecl decrement(void)" (?decrement@@$$FYAXXZ), указанный в функции "int __cdecl main(void)" (?main@@$$HYAHXZ)J:\ MCM 10.05\MCM 10.05\MCM10.obj MCM 10.05

24.01.2013

  • О чувак! Вам нужен инструктор по C++ или книга! :) 24.01.2013

Ответы:


1

Вы объявляете глобальные функции increment(), decrement() и getCount(), которые никогда не определяете. Вы получаете ошибку связывания, потому что вы вызываете их в main(), а компоновщик не может найти их определения.

Вероятно, вы хотели вызвать функции-члены объекта Counter, например:

int main()
{
    CounterType Test;

    Test.increment();
    Test.decrement();
    Test.getCount();
}

Если это так, вы должны удалить объявления глобальных функций:

// THESE DECLARATIONS BEFORE main() SHOULD NOT BE THERE! JUST REMOVE THEM
// void increment();
// void decrement();
// int getCount();
// void output(ostream& outStream);
24.01.2013

2

Вы объявляете глобальную функцию с именем decrement() и не определяете ее.

Существует CounterType::decrement(), но это другая функция.

То же самое касается increment() и getCount().

24.01.2013

3

Вы сделали 2 ошибки:

1) Судя по вашему коду, вы дополнительно объявляете следующие функции

 void increment();
 void decrement();
 int getCount();
 void output(ostream& outStream);

Вы уже предоставили их объявления в классе, так что теперь не нужно объявлять снова.

2) Внутри main вы вызываете функции таким образом,

increment();
decrement();
getCount();

что, вероятно, вы не хотите делать, потому что вызов таким образом вызовет глобальные функции. Правильный способ вызова функций класса — по объекту класса.

Test.increment();
Test.decrement();
Test.getCount();

Просто исправив эти 2 изменения, ваша программа готова и готова к работе. :)

24.01.2013
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..