Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对func'的未定义引用;abc&x27;_C++ - Fatal编程技术网

C++ 对func'的未定义引用;abc&x27;

C++ 对func'的未定义引用;abc&x27;,c++,C++,我可能无法给出完整的代码,但我可以创建一个较小的情况。我有一个api,比如abc,它在abc.h中声明如下 extern int abc ( int x, int y = 0); 此api用于多个文件,如x.cpp、y.cpp和z.cpp 在文件z.cpp中,我想使用这个api并向它传递一个额外的参数。因此,我将abc.h中的声明更改为: extern int abc ( int x, int y = 0, int z = 0) 这样,我就不需要在x.cpp和y.cpp文件中更改对这些api

我可能无法给出完整的代码,但我可以创建一个较小的情况。我有一个api,比如abc,它在abc.h中声明如下

extern int abc ( int x, int y = 0);
此api用于多个文件,如x.cpp、y.cpp和z.cpp

在文件z.cpp中,我想使用这个api并向它传递一个额外的参数。因此,我将abc.h中的声明更改为:

extern int abc ( int x, int y = 0, int z = 0)
这样,我就不需要在x.cpp和y.cpp文件中更改对这些api调用的调用。对吗?我可以很容易地在abc api内部定义的“z”下完成我的工作。比如:

int abc(int x, int y, int z) {
  ...
  ...
  if (z) {
    <do_whatever>
  }
}
intabc(intx,inty,intz){
...
...
如果(z){
}
}
但当我编译它时,我在x.cpp和y.cpp文件中看到了对“abc”的未定义引用。发生了什么事

这样,我就不需要在任何时候更改对这些api调用的调用 文件x.cpp和y.cpp。对吧?

您是对的,您不必更改x.cpp和y.cpp中的调用

但是,您仍然需要重新编译它们,否则将出现您提到的链接编辑器错误。理想情况下,您的构建系统应该看到x.o和y.o是abc.h的依赖项,并且如果标头发生更改,则需要重新生成两个对象文件

这样,我就不需要在任何时候更改对这些api调用的调用 文件x.cpp和y.cpp。对吧?

您是对的,您不必更改x.cpp和y.cpp中的调用


但是,您仍然需要重新编译它们,否则将出现您提到的链接编辑器错误。理想情况下,您的构建系统应该看到x.o和y.o是abc.h的依赖项,如果标头发生更改,则需要重新生成两个对象文件。

向我们显示错误所在的代码,以及错误消息的全文。您如何从x.cpp和y.cpp调用abc?@jarod-啊,我将其理解为在z.cpp中添加了一个新的declation。现在新的猜测是,并不是所有的cpp文件都被重新编译以查看更改。只是想弄清楚,您使用的是什么IDE?你自己写过一些makefile吗?@JoseFelipe,来自x.cpp&y.cpp,它被称为:abc(1)或abc(1,1)告诉我们错误所在的代码,以及错误消息的全文你是如何从x.cpp和y.cpp调用abc的?@jarod-啊,我把它理解为在z.cpp中添加了一个新的declation。现在新的猜测是,并不是所有的cpp文件都被重新编译以查看更改。只是想弄清楚,您使用的是什么IDE?你自己写过一些makefile吗?@JoseFelipe,来自x.cpp&y.cpp,它被称为:abc(1)或abc(1,1)谢谢。我明白这一点。这也解决了我的问题。谢谢。我明白这一点。它也解决了我的问题。