我在这里,试图找出我的代码有什么问题,但没有成功:(\n我正在编写一个重采样器,但我想这根本没有兴趣,我只是想让你做这个愚蠢的警告消失。无论如何,这是我的代码:
\n\nddc.hpp
\n\n#ifndef __DIGITAL_DOWN_CONVERTER_H__\n#define __DIGITAL_DOWN_CONVERTER_H__\n\n#include <vector>\n#include "interpolator.h"\n\nnamespace ddc {\n void decimate(std::vector<float> &, unsigned int);\n void expand(std::vector<float> &, unsigned int);\n void perform_resampling(std::vector<float>, unsigned int, unsigned int);\n void generate_filter(std::vector<float> &, unsigned int, unsigned int);\n float Sinc(float);\n unsigned int mcd(unsigned int, unsigned int);\n}\n\n#endif\nRun Code Online (Sandbox Code Playgroud)\n\nddc.cpp
\n\n#include "ddc.hpp"\n\nnamespace ddc {\n void perform_resampling(std::vector<float> &data, unsigned int freq_1, unsigned int freq_2) {\n unsigned int i, gcd = mcd(freq_1, freq_2);\n unsigned int downFactor, upFactor;\n std::vector<float> filter;\n\n downFactor = freq_1/gcd;\n upFactor = freq_2/gcd;\n\n generate_filter(filter, 1024 …Run Code Online (Sandbox Code Playgroud) 我在我的Ubuntu 13.04机器上安装了clang 3.2,并编译和构建了libc ++,一切都已就绪.但是,当我尝试链接我的(非常简单的)代码时,链接器报告对std :: cout等的引用是未定义的.
如果有人能告诉我我能做些什么来解决这个问题,我会非常感激 - 我已经尝试了所有我能想到的东西.
命令和输出在这里:
$ clang++ -v -stdlib=libc++ -lpthread -ldl sqlite3/sqlite3.o src/world.o -o bin/world
Ubuntu clang version 3.2-1~exp9ubuntu1 (tags/RELEASE_32/final) (based on LLVM 3.2)
Target: x86_64-pc-linux-gnu
Thread model: posix
"/usr/bin/ld" -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o bin/world /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/crtbegin.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../.. -L/lib -L/usr/lib -lpthread -ldl sqlite3/sqlite3.o src/world.o -lc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/crtend.o /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crtn.o
src/world.o: In function `main':
/home/douglivesey/work/home/cpp/clang/biots/src/world.cpp:17: undefined reference to `std::cout'
/home/douglivesey/work/home/cpp/clang/biots/src/world.cpp:17: …Run Code Online (Sandbox Code Playgroud) 我正在测试如何在 C 中使用 extern ,因此我为 main.c、test.c、headfile.h 创建三个文件。我想在 headfile.h 中声明变量和函数,在 test.c 中定义,然后在 main.c 中打印出变量并调用函数。它通过使用 Dev c++ 成功运行,但是,当我将完全相同的文件放入VScode 显示错误,指出存在未定义的变量引用
错误消息 在此处输入图像描述
#include <stdio.h>
#include <stdlib.h>
#include"D:\My Documents\Desktop\CODE\c\VScode\externTest\headfile.h"
int gVar = 1;
int main(void)
{
extern float a;
printf("a = %f\n",a);
printf("gVar = %d\n",gVar);
printf("aa = %d\n",aa);
printf("bb = %f\n",bb);
function ();
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
#include "D:\My Documents\Desktop\CODE\c\VScode\externTest\headfile.h"
float a = 100;
int aa = 200;
float bb = 300;
void function (void){
printf("yeh you got it!!\n");
extern …Run Code Online (Sandbox Code Playgroud) 我收到了以下错误,并且不能为我的生活弄清楚我做错了什么.
$ gcc main.c -o main
Undefined symbols:
"_wtf", referenced from:
_main in ccu2Qr2V.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
main.c中:
#include <stdio.h>
#include "wtf.h"
main(){
wtf();
}
Run Code Online (Sandbox Code Playgroud)
wtf.h:
void wtf();
Run Code Online (Sandbox Code Playgroud)
wtf.c:
void wtf(){
printf("I never see the light of day.");
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我将整个函数包含在头文件中而不仅仅是签名中,那么它就符合要求,因此我知道wtf.h被包含在内.为什么编译器看不到wtf.c?或者我错过了什么?
问候.
似乎无法让错误消失.错误如下.我已经看过谷歌仍然无法搞清楚.这不像我是Cpp的新手,但有一段时间没有被它愚弄.
奇怪的是它在Windows中使用G ++ ...
错误:
main.cpp中
#include <iostream>
#include "Help.h"
using namespace std;
int main () {
Help h;
h.sayName();
// ***
// ***
// ***
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Help.h
#ifndef HELP_H
#define HELP_H
class Help {
public:
Help();
~Help();
void sayName();
protected:
private:
}; …Run Code Online (Sandbox Code Playgroud) 是否必须为虚函数定义?
请考虑以下示例程序:
#include <iostream>
using namespace std;
class base
{
public:
void virtual virtualfunc();
};
class derived : public base
{
public:
void virtualfunc()
{
cout << "vf in derived class\n";
}
};
int main()
{
derived d;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了链接错误:
在function
base::base():: undefined引用中vtable for base
我没有基类中虚函数的定义.为什么即使我没有显式调用虚函数,也会发生此错误?
我发现有趣的是,如果我没有实例化类的对象derived,则链接错误不再存在.为什么是这样?什么实例化与上述链接错误有关?
我的C程序使用一些zlib函数(比如gzopen,gzread).我已经zlib.h在我的程序中包含了头文件,并-lz在编译时添加了选项,但我仍然得到一个错误,即gz函数有未定义的引用.我正在使用kubuntu 11.10并安装了以下软件包:libgh-zlib-dev,zlib1g-dbg,zlib1g和zlib1g-dev.
我试过改变连接命令的位置,但没有运气.这是我现在拥有的那个:
CFLAGS = -Wall -pthread -lm -lz -std = c99-Wextra
我正在使用Code Blocks IDE,我想为SFML安装Tiled Map Editor.所以,我下载了源代码并将其导入我的项目.不幸的是,由于缺少zlib库,构建完成了错误.我下载并重新构建.这次我收到的错误如下:
undefined reference to `inflateInit2_'|
undefined reference to `inflateEnd'|
undefined reference to `inflateEnd'|
Run Code Online (Sandbox Code Playgroud)
在Internet上我找到了加入链接器命令的建议-lz,但编译器拒绝抛出错误:找不到-lz.有谁知道如何修理它?
问候.
当我在我的main函数中调用模板类"add"和"greater"中的两个函数时,我一直得到未定义的引用.
所以,我有:number.h
#ifndef NUMBER_H
#define NUMBER_H
template <class T>
class number {
public:
T x;
T y;
number (int a, int b){
x=a; y=b;}
int add (T&);
T greater ();
};
#endif
Run Code Online (Sandbox Code Playgroud)
number.cpp
#include "number.h"
template <class T>
int number<T>::add (T& rezAdd){
rezAdd = x+y;
return 1;
}
template <class T>
T number<T>::greater (){
return x>y? x : y;
}
Run Code Online (Sandbox Code Playgroud)
我的主文件是:resolver.cpp
#include <stdio.h>
#include <stdlib.h>
#include "number.h"
int main (int argc, char **argv) {
int aux;
number<int> c(3,5);
c.add(aux);
printf …Run Code Online (Sandbox Code Playgroud) 将final关键字添加到虚函数声明时,我遇到了一个奇怪的情况,其定义在一个单独的.cpp文件中.
请考虑以下示例:
IClass.hpp
class IClass //COM-like base interface
{
protected:
virtual ~IClass(){} //derived classes override this
public:
virtual void release() final;
};
Run Code Online (Sandbox Code Playgroud)
dllmain.cpp(共享库)
#include "IClass.hpp"
...
void IClass::release()
{
delete this;
}
...
Run Code Online (Sandbox Code Playgroud)
main.cpp(独立可执行文件)
//various includes here
...
int main(int argc, char** argv)
{
/* From "IGameEngine.hpp"
class IGameEngine : public IClass
{
...
};
*/
IGameEngine* engine = factoryGameEngine();
...
engine->release();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
事实上,GCC 4.9.2将报告undefined reference to 'IClass::release()'
我的目标是IClass::release()在将其实现隐藏在游戏引擎的共享库中时,将其作为不可覆盖的.
有什么建议?