LNK2019 & LNK1120 Неразрешенные внешние проблемы Возможно, это легко исправить, но у меня есть реальные проблемы
Я получаю эти LNK2019 некоторое время и не могу найти способ избавиться от них. Я знаю, что об этих ошибках уже есть много тем, но я еще не нашел ничего, что помогло бы мне, поэтому надеялся, что кто-то может пропустить что-то явно очевидное, что я, возможно, пропустил.
Я не учился очень традиционно, так что извините, если мой код немного грязный.
главный:
#include "eventLoop.h"
#include <time.h>
#include <iostream>
using namespace std;
bool buttonA, buttonB, buttonC, buttonD, buttonE, buttonF, buttonG = false;
bool KeepProgramOpen = true;
time_t timer;
time_t oldtime;
time_t dtime;
time_t looptime;
int rate;
char Note;
bool FirstLoop = true;
eventLoop MainEventLoop;
int main()
{
rate = 60;
looptime = 1000 / rate;
while(KeepProgramOpen==true)
{
time(&timer);
dtime = timer-oldtime;
if(dtime<looptime)
{
continue;
}
oldtime = timer;
MainEventLoop.FindFinalNote(buttonA, buttonB, buttonC, buttonD, buttonE, buttonF, buttonG, FirstLoop);
FirstLoop = false;
//Closing stuff goes here
}
}
eventLoop.h:
#pragma once
class eventLoop {
public:
void FindFinalNote(bool, bool, bool, bool, bool, bool, bool, bool);
protected:
};
eventLoop.cpp:
#include "eventLoop.h"
#include "MidiOutput.h"
#include "FileIO.h"
MidiOutput MidiOutputX;
FileIO fileioX;
void eventLoop::FindFinalNote(bool A, bool B, bool C, bool D, bool E, bool F, bool G, bool firstloop)
{
if(firstloop == true)
{
for (int loopindex=0; loopindex<10; loopindex++)
{
// Note[loopindex] = Filecheck for notes
}
MidiOutputX.FindDevice(
1, /*int argc number of ports*/
60, /*char argv argument vector - strings pointed to, i don't really get it*/
);
}
char Note[10];
int KeyIndex = 0;
FileIO::key CurrentKey;
CurrentKey = fileioX.RetrieveKey(KeyIndex);
for (int x = 0; x < 10; x++)
{
Note[x] = CurrentKey.Note[x];
}
// There's a bunch of simple if statements here, nothing I need to bore you with
}
MidiOutput.h:
#pragma once
class MidiOutput {
public:
void FindDevice(int, char);
void PlayNote(unsigned char);
void EndNote();
void CloseDevice();
protected:
};
MidiOutput.cpp:
#include "MidiOutput.h"
#include <Windows.h>
#include <mmsystem.h>
#include <stdio.h>
union { unsigned long word; unsigned char data[4]; } message;
int midiport;
HMIDIOUT device;
void FindDevice(int argc, char** argv)
{
if (argc < 2) {
midiport = 0;
} else {
midiport = atoi(argv[1]);
}
printf("Midi output port set to %d.\n", midiport);
midiOutOpen(&device, midiport, 0, 0, CALLBACK_NULL);
message.data[0] = 0x90; //command byte
message.data[1] = 60; //middle C
message.data[2] = 0; //volume, 0-100
message.data[3] = 0; //not used
}
void MidiOutput::PlayNote(unsigned char Note)
{
message.data[1] = Note;
message.data[2] = 100;
}
void MidiOutput::EndNote()
{
message.data[2] = 0;
}
void MidiOutput::CloseDevice()
{
midiOutReset(device);
midiOutClose(device);
}
Точные ошибки:
Ошибка 1 ошибка LNK2019: неразрешенный внешний символ "public: void __thiscall MidiOutput::FindDevice(int,char)" (?FindDevice@MidiOutput@@QAEXHD@Z), на который ссылается функция "public: void __thiscall eventLoop::FindFinalNote(bool,bool",bool,bool,bool,bool,bool,bool)" (?FindFinalNote@eventLoop@@QAEX_N0000000@Z) C:\Users\Hilly\ Documents\visual studio 2010\Projects\GHX\GHX\eventLoop.obj GHX
Ошибка 2 ошибка LNK2019: неразрешенный внешний символ _imp_midiOutOpen @ 20, на который ссылается функция "void __cdecl FindDevice(int,char * *)" (?FindDevice@@YAXHPAPAD@Z) C:\Users\Hilly\ Documents \ visual studio 2010 \ Проекты \GHX\GHX\MidiOutput.obj GHX
Ошибка 3, ошибка LNK2019: неразрешенный внешний символ _imp_midiOutClose @ 4, на который ссылается функция "public: void __thiscall MidiOutput::CloseDevice(void)" (?CloseDevice@MidiOutput@@QAEXXZ) C:\Users\Hilly\documents\visual studio 2010\ Проекты \GHX\GHX\MidiOutput.obj GHX
Ошибка 4 ошибка LNK2019: неразрешенный внешний символ _imp_midiOutReset @ 4, на который ссылается функция "public: void __thiscall MidiOutput::CloseDevice(void)" (?CloseDevice@MidiOutput@@QAEXXZ) C:\Users\Hilly\documents\visual studio 2010\ Проекты \GHX\GHX\MidiOutput.obj GHX
Ошибка 5 ошибка LNK1120: 4 неразрешенных внешних файла C: \ Users \ Hilly \ Documents \ visual studio 2010 \ Projects \ GHX \ Debug \ GHX.exe GHX
Заранее спасибо, и извините за стену кода, я не уверен, что нужно.
1 ответ
Недостающие символы, midiOutOpen
, midiOutClose
и т.д. определены в DLL Winmm.dll
, Вам нужно будет связаться с Winmm.lib
либо указав его в качестве входных данных для команды ссылки, либо включив его в свой файл:
#pragma comment(lib, "Winmm.lib")
Вы также получаете сообщение об ошибке MidiOutput::FindDevice
, Вам нужно будет исправить подписи так, чтобы .h
файл и .cpp
сопоставить и квалифицировать определение функции в .cpp
файл с именем класса (MidiOutput::
).