我正在写一个程序,分为三个不同的文件:
- 1)一个名为
my.h
的报头; cpp源文件 - 主文件名为
use.cpp
;
my.cpp
;下面是它们的语句:
/* Header file my.h
Define global variable foo and functions print and print_foo
to print results out */
extern int foo;
void print_foo();
void print(int);
/* Source file my.cpp where are defined the two funcionts print_foo() and print()
and in where it is called the library std_lib_facilities.h */
#include "stdafx.h"
#include "std_lib_facilities.h"
#include "my.h"
void print_foo() {
cout << "The value of foo is: " << foo << endl;
return;
}
void print(int i) {
cout << "The value of i is: " << i << endl;
return;
}
/ use.cpp : definisce il punto di ingresso dell'applicazione console.
//
#include "stdafx.h"
#include "my.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int foo = 7;
int& i = foo;
i = 99;
char cc = '0';
while (cin >> cc) {
switch (cc) {
case '1':
void print_foo();
break;
case '2':
void print();
break;
default:
exit(EXIT_FAILURE);
}
}
return 0;
}
我的主要问题是程序编译和运行正确,但它没有打印任何东西,因为我想。
我该如何修复它?
谢谢!
狮子座不需要调用指定返回类型的函数。正确的
void print_foo(); // This actually declares a function prototype
print_foo();
和
print(i); // Pass i as argument
从void print_foo();
和void print();
的switch
块中删除void
目前你只是声明一个函数原型;实际上不是调用函数。
你的extern int foo;
方法,虽然在语法上是有效的,但会使你的代码库更难扩展和维护:考虑显式传递参数。
你的代码声明*"定义全局变量foo…"如下所示…
extern int foo;
…但这只是声明了一些翻译单元将实际定义它(没有前面的extern
限定符)。在你发布的代码中没有实际的变量,这意味着你的程序不应该链接,除非你使用的库碰巧有一个foo
符号在里面。
这段简短的代码浓缩了你的问题:
#include <iostream>
extern int foo;
void f()
{
std::cout << foo << 'n';
}
int main() {
int foo = 7;
f();
}
您可以在这里看到编译器错误消息,即:
/tmp/ccZeGqgN.o: In function `f()':
main.cpp:(.text+0x6): undefined reference to `foo'
collect2: error: ld returned 1 exit status
输入main函数
case '1':
print_foo();
break;
注意我在case 1中删除了单词"void"。因为你不需要重新声明函数。