C ++ / CLI:未解决的令牌& Windows窗体应用程序中的外部符号(LNK2001& LNK2020)

时间:2016-05-13 16:25:28

标签: c++ forms visual-c++

关于我的项目的背景:

这次在我大学的项目中,我必须创建一个Windows窗体应用程序(底部将介绍有关这些工具的信息)。此应用程序可以训练其神经网络识别狗的图像及其名称(名称分配给此应用程序中的数据)。

在应用程序中,我有三种形式:主窗体(如主菜单),训练窗体和识别窗体。

当我启动此应用程序时,我希望这三个表单访问相同的全局数据,我将其放在文件Globals.hGlobals.cpp中。我想在主窗体中初始化这些全局变量,并且我想在主窗体(训练和识别表单)之外使用和更新这些全局变量。

以下是这些全局变量的代码:

Globals.h代码:

#pragma once

#include <fann.h>
#include <iostream>
#include <string>
#include <map>

using namespace std;

class Globals {

public:
    static fann *ann;
    static map<string, string> nameMap;
    static int pictureCount;

public:
    static void initializeNeuralNetwork();
    static void insertNewDog(string /*output*/, string /*name*/);
    static string getNameOfDog(string /*output*/);
    static void incrementPictureCount();
    static fann * getAnn();
    static void trainNeuralNetwork(struct fann_train_data *data, int max_epochs,
                                               int epochs_between_reports,
                                               float desired_error);
    static void saveNeuralNetwork();
    static int getPictureCount();

};

Globals.cpp代码:

#include "stdafx.h"
#include "Globals.h"

using namespace std;

void Globals::initializeNeuralNetwork() {
    ann = fann_create_from_file("ann.net");
    if (!ann) {
        ann = fann_create_standard(3, 49, 38, 8);
    }

    fann_set_activation_function_layer(ann, FANN_SIGMOID, 0);
    fann_set_activation_function_layer(ann, FANN_SIGMOID, 1);
    fann_set_activation_function_layer(ann, FANN_SIGMOID, 2);

    pictureCount = 0;
}

void Globals::insertNewDog(string output, string name) {
    nameMap.insert( pair<string, string>(output, name) );
}

string Globals::getNameOfDog(string output) {
    if (nameMap.empty()) return "";

    string result = (nameMap.count(output)) ? nameMap[output] : "ERROR";
    return result;
}

fann * Globals::getAnn() {
    return ann;
}

void Globals::trainNeuralNetwork(struct fann_train_data *data, 
        int max_epochs, int epochs_between_reports, float desired_error) {

    fann_train_on_data(ann, data, max_epochs, epochs_between_reports, desired_error);
}

void Globals::saveNeuralNetwork() {
    fann_save(ann, "ann.net");
}

void Globals::incrementPictureCount() {
    pictureCount++;
}

int Globals::getPictureCount() {
    return pictureCount;
}

问题:

我试图寻找类似于我的问题,但到目前为止还没有发现任何问题。问题是,当我尝试在Training表单中调用这些全局变量的方法时,我在尝试运行应用程序时从输出中得到了这些LNK *错误:

1>------ Build started: Project: DogBreedRecognizer-Group6, Configuration: Debug Win32 ------
1>  DogBreedRecognizer-Group6.cpp
1>c:\users\baskoro indrayana\documents\visual studio 2010\projects\dogbreedrecognizer-group6\dogbreedrecognizer-group6\TrainingForm.h(654): warning C4996: 'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa. See online help for details.
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h(867) : see declaration of 'itoa'
1>c:\users\baskoro indrayana\documents\visual studio 2010\projects\dogbreedrecognizer-group6\dogbreedrecognizer-group6\TrainingForm.h(664): warning C4244: 'argument' : conversion from 'int' to 'fann_type', possible loss of data
1>c:\users\baskoro indrayana\documents\visual studio 2010\projects\dogbreedrecognizer-group6\dogbreedrecognizer-group6\TrainingForm.h(703): warning C4305: 'argument' : truncation from 'double' to 'float'
1>Globals.obj : error LNK2020: unresolved token (0A000023) "public: static class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > Globals::nameMap" (?nameMap@Globals@@$$Q2V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@2@@std@@A)
1>Globals.obj : error LNK2020: unresolved token (0A000028) "public: static int Globals::pictureCount" (?pictureCount@Globals@@$$Q2HA)
1>Globals.obj : error LNK2020: unresolved token (0A00002D) "public: static struct fann * Globals::ann" (?ann@Globals@@$$Q2PAUfann@@A)
1>Globals.obj : error LNK2001: unresolved external symbol "public: static int Globals::pictureCount" (?pictureCount@Globals@@$$Q2HA)
1>Globals.obj : error LNK2001: unresolved external symbol "public: static struct fann * Globals::ann" (?ann@Globals@@$$Q2PAUfann@@A)
1>Globals.obj : error LNK2001: unresolved external symbol "public: static class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > Globals::nameMap" (?nameMap@Globals@@$$Q2V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@2@@std@@A)
1>C:\Users\Baskoro Indrayana\Documents\Visual Studio 2010\Projects\DogBreedRecognizer-Group6\Debug\DogBreedRecognizer-Group6.exe : fatal error LNK1120: 6 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

如果你想看到我调用这个Globals类的方法的代码,下面是表格的代码:

  • Main form
  • Training form
  • 表彰形式:不完整 - 我还没有在这个表格上工作过,也没有打过任何一个Globals&#39;那里的方法,但是。

所以,我的问题是:

  1. 导致这些链接器错误的原因是什么?在这种情况下如何解决这些问题?
  2. 我想知道是否有更好的方法来组织人工神经网络的数据,其方式是三种表格可以使用和更新它们(并使用更新的值。)
  3. 使用的工具: Visual C ++ 2010 Express Edition(我必须使用它,因为我的大学任务指示我们,所以没有选择使用任何其他IDE /语言/工具,如果你问。)

    这一切都来自我。我会等待你对我的问题的回答,我很感激。谢谢。

0 个答案:

没有答案
相关问题