Справка по реализации списка ссылок - Visual C ++ - PullRequest
2 голосов
/ 23 марта 2010

Я пытаюсь реализовать список ссылок, в котором хранится название города (хотя вы увидите это закомментированным, поскольку мне нужно решить проблему невозможности использования строки и необходимости использовать примитивный тип данных вместо этого во время объявление), долгота, широта и, конечно, указатель на следующий узел в цепочке. Я новичок в среде Visual C ++, и мой мозг несколько зашифрован сегодня после кодирования в течение нескольких часов подряд, поэтому я подумал, может ли кто-нибудь помочь решить две ошибки, которые я получаю (игнорируйте синтаксис #include, поскольку мне пришлось изменить их, чтобы избежать браузер интерпретирует HTML!):

1>U08221.obj : error LNK2028: unresolved token (0A000298) "public: __thiscall Locations::Locations(void)" (??0Locations@@$$FQAE@XZ) referenced in function "int __clrcall main(cli::array^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)

1>U08221.obj : error LNK2019: unresolved external symbol "public: __thiscall Locations::Locations(void)" (??0Locations@@$$FQAE@XZ) referenced in function "int __clrcall main(cli::array^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)

Код для моего заголовочного файла здесь:

#include <string>

struct locationNode
{
    //char[10] nodeCityName;
    double nodeLati;
    double nodeLongi;
    locationNode* Next;
};

class Locations
{
private:
    int size;
public:
    Locations(); // constructor for the class
    locationNode* Head;
    int Add(locationNode* Item);
};

и вот код для файла, содержащего основной метод:

// U08221.cpp : main project file.

#include "stdafx.h"

#include "Locations.h"
#include <iostream>   
#include <string>

using namespace std;

int n = 0;    
int x;    
string cityNameInput;    
bool acceptedInput = false;   

int Locations::Add(locationNode *NewItem)
{
    locationNode *Sample = new locationNode;

    Sample = NewItem;
    Sample->Next = Head;
    Head = Sample;
    return size++;
}

void CorrectCase(string name) // Correct upper and lower case letters of input
{
    x = name.size();
    int firstLetVal = name[0], letVal;
    n = 1; // variable for name index from second letter onwards

    if((name[0] >90) && (name[0] < 123)) // First letter is lower case
    { 
        firstLetVal = firstLetVal - 32; // Capitalise first letter
        name[0] = firstLetVal;
    }

    while(n <= x - 1)
    {
        if((name[n] >= 65) && (name[n] <= 90))
        {
            letVal = name[n] + 32;
            name[n] = letVal;
        }
        n++;
    }
    cityNameInput = name;
}


void nameValidation(string name)
{
    n = 0; // start from first letter
    x = name.size();
    while(!acceptedInput)
    {
        if((name[n] >= 65) && (name[n] <= 122)) // is in the range of letters
        {
            while(n <= x - 1)
            {
                while((name[n] >=91) && (name[n] <=97)) // ERROR!!
                {
                    cout << "Please enter a valid city name" << endl;
                    cin >> name;
                }
                n++;
            }
        }
        else {
            cout << "Please enter a valid city name" << endl;
            cin >> name;
        }
        if(n <= x - 1)
        {
            acceptedInput = true;
        }
    }
    cityNameInput = name;
}

int main(array<System::String ^> ^args)
{
    cout << "Enter a city name" << endl;
    cin >> cityNameInput;

    nameValidation(cityNameInput); // check is made up of valid characters
    CorrectCase(cityNameInput); // corrects name to standard format of capitalised first letter, and lower case subsequent letters
    cout << cityNameInput;
    cin >> cityNameInput;

    Locations::Locations();

    Locations *Parts = new Locations();
    locationNode *Part;
    Part = new locationNode;
    //Part->nodeCityName = "London";
    Part->nodeLati = 87;
    Part->nodeLongi = 80;
    Parts->Add(Part);
}

Я знаком с концепциями, но несколько неопытен с ООП, поэтому я делаю некоторые глупые ошибки, которые вы никогда не найдете, когда смотрите на что-то слишком долго. Будем благодарны за любую помощь, которую вы можете предложить!

Спасибо

1 Ответ

2 голосов
/ 23 марта 2010

Ваш код имеет как минимум две проблемы.

Во-первых, компоновщик жалуется, что не может найти вашу реализацию конструктора Locations (Locations :: Locations ()). Это потому, что вы объявили это в своем заголовке, но фактически нигде не определяли его.

Изменение строки в заголовке на:

Locations() {}

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

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

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